2010-06-08 6 views
1

Я пытаюсь ввести дату в таблице туздПреобразование строки в дату

`ssdate` datetime 

Функция, которая производит дату может выводить его в 3-х форматах:

1276142400000 
Thu Jun 10 00:00:00 GMT-0400 2010 
Fri Jun 4 2010 

Я интересно какой из них проще всего преобразовать в этот формат поля? Поскольку я пытаюсь сохранить только дату, есть ли лучший вариант, чем datetime, который будет работать с одним из этих форматов вывода?

ответ

3

Вы можете использовать третий формат:

date('Y-m-d H:i:s', strtotime('Fri Jun 4 2010')); 

Просто введите результат в поле datetime. Если вы собираетесь использовать поле даты вместо этого вы можете сделать

date('Y-m-d', strtotime('Fri Jun 4 2010')); 
0

Вы можете установить столбец в качестве varchar (14), будет отлично работать с вашим первым выходом формата.

+0

... только до 2286-11-20 17:46:39 (: Не лучший способ пойти в любом случае. – hudolejev

1

Самый простой способ, вероятно, будет FROM_UNIXTIME(), но 1276142400000 не появляется, чтобы быть Отметка времени Unix:

mysql> SELECT FROM_UNIXTIME(1276142400000); 
+------------------------------+ 
| FROM_UNIXTIME(1276142400000) | 
+------------------------------+ 
| NULL       | 
+------------------------------+ 
1 row in set (0.00 sec) 

Возможно, это временная метка Unix mutiplied на 1000:

mysql> SELECT FROM_UNIXTIME(1276142400000/1000); 
+-----------------------------------+ 
| FROM_UNIXTIME(1276142400000/1000) | 
+-----------------------------------+ 
| 2010-06-10 06:00:00    | 
+-----------------------------------+ 
1 row in set (0.05 sec) 

И, если вы не уверены , у вас всегда есть STR_TO_DATE():

mysql> SELECT STR_TO_DATE('Fri Jun 4 2010', '%a %b %e %Y'); 
+----------------------------------------------+ 
| STR_TO_DATE('Fri Jun 4 2010', '%a %b %e %Y') | 
+----------------------------------------------+ 
| 2010-06-04         | 
+----------------------------------------------+ 
1 row in set (0.00 sec) 
+0

upvote для 'FROM_UNIXTIME()', я полностью согласен с тем, что преобразование даты должно быть сделано в базе данных, если возможно . Однако, STR_TO_DATE() 'является спорным, поскольку весь процесс будет зависеть от локалей (и, возможно, часовых поясов). – hudolejev

0

В базе данных я бы хранить значение времени в в DATETIME поле, в основном из-за встроенные методы даты манипуляции (INTERVAL и т.д.). Одна из возможных альтернатив - хранить временную метку UNIX как числовое значение, но я бы не рекомендовал этого. Если есть сомнения, выберите стандартные решения.

Что касается формата даты для конвертирования из, я бы определенно пошел с отметкой времени UNIX (вариант # 1 в вашем случае, умноженный на 1000, я думаю) как наиболее универсальный. Все остальные форматы зависят от локали и часовых поясов, что является возможным источником большого количества головных болей в будущем.

Смежные вопросы