Как создать временную метку ИЛИ как лучше всего обращаться с датами SQL? - PullRequest
0 голосов
/ 11 января 2011

В моем приложении PHP я получаю даты из базы данных MySQL, когда форматирую их с помощью команды PHP date().Я хочу привести это в порядок и переместить все целиком в представление, а не в поиск.Но я столкнулся с некоторыми проблемами.

При получении даты из базы данных я передаю ее остальной части приложения после запуска на ней strtotime(), чтобы функции date() могли работать с ними.Это хорошая идея?или я упускаю что-то лучшее и очевидное?Даты, с которыми я имею дело, почти все имеют тип DATE, а не DATETIME.

Итак, я получаю дату и могу использовать date() для ее отображения на веб-странице.Но иногда я получаю что-то из базы данных исключительно для вставки в другое место в базе данных, и мне приходится искать через бэкэнд, чтобы найти места, которые нуждаются в date() поражениях с целью разделения их на представление.Мои функции поиска возвращают strtotime($date_from_db), а затем я создаю новую запись в другой таблице ... и все новые записи должны пройти через функции проверки и подготовки.И в этом заключается проблема.Я проверяю и готовлю даты, проверяя, не являются ли они strtotime() чем-то другим, кроме 0000-00-00.Но я не могу запустить strtotime() на временной отметке;в тесте я побежал, если бы дал мне 31.12.1969.Итак, мои вопросы:

  1. Можно ли как-нибудь запустить strtotime() на временной метке?
  2. Если нет, есть ли простой способ узнать, является ли переменная временной меткой?Таким образом, я мог бы просто запустить date(), а не иметь дело с strtotime()?Кроме того, чтобы посмотреть, выйдет ли это до 31.12.1969, потому что я не знаю, могу ли я доверять неудаче быть последовательной.Разве это в любом случае допустимо?
  3. И я делаю это совершенно неправильно?

Ответы [ 3 ]

1 голос
/ 11 января 2011

Как общий подход, я бы очень хотел:

  1. Сохранять значения даты / времени, используя тип даты и времени MySQL, так как это позволит вам осмысленно запрашивать данные в MySQL.не прибегая к какому-либо использованию> = "timestampvalueX" и т. д.

  2. Сохраняйте всю "живую" информацию о дате с использованием скриптов PHP в формате отметки времени.

Таким образом, вы, вероятно, хотите сохранить целевую информацию в этом формате в качестве цели.Вы можете легко преобразовать это в формат, который PHP может использовать либо в самом запросе (используя UNIX_TIMESTAMP ), либо взорвав формат YYYY-MM-DD HH: MM: SS и используя PHP mktime для создания «стандартной» временной метки.(Хотя вы можете использовать checkdate для целей проверки.)

Возвращаясь к вашим конкретным вопросам:

  1. strotime не удастся, если отметка временипередается.

  2. В качестве промежуточной меры вы можете написать функцию, которая проверяет, было ли предоставленное значение целым числом из 10 цифр, и предполагала, что это была собственная метка времени, если она была.(if(is_int($value) && strlen($value) == 10)...)

  3. Это звучит немного беспорядочно из-за звуков вещей, поэтому в качестве краткосрочной цели вы, вероятно, должны попытаться стандартизировать использование как в MySQL, так и в PHP.

1 голос
/ 11 января 2011

Пусть mySQL справится с этим, когда вы запросите метку времени.

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

Запрос будет извлекать временную метку, отформатированную так, как вам нужно, избавляя вас от необходимости выполнять какую-либо обработку строки.

0 голосов
/ 11 января 2011

Но я не могу запустить strtotime () для отметки времени;в тесте я побежал, если бы дал мне 31.12.1969.

12/31/1969 - начало эпохи UNIX 1-1-1970 со смещением часового пояса.

Выполнение strtotime() на временной отметке вернет 0который заканчивается как 1-1-1970 UTC, когда вы запускаете его через date().Проверка на strtotime результат 0 должен сделать это.

...