2010-06-08 54 views
1

我想在一个MySQL表将字符串转换成datetime

`ssdate` datetime 

产生之日起的功能输入一个日期可以在三种格式输出它:

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')); 

只需将结果放入日期时间字段即可。如果你打算使用日期字段,而不是你可以做

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

您可以将您的列设置为varchar(14),将与您的第一个格式输出完美配合。

+0

...直到2286-11-20 17:46:39(不是最好的方式去吧 – hudolejev 2010-06-08 11:41:56

1

最简单的方法很可能是FROM_UNIXTIME(),但1276142400000并不似乎是一个Unix时间戳:如果不确定

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

而且,:

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

也许这是一个Unix时间戳1000 mutiplied ,你总是有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 for'FROM_UNIXTIME()',我完全同意日期转换应该在数据库中完成,如果可能的话。但是,'STR_TO_DATE()'是有争议的,因为整个过程将取决于语言环境(也可能是时区)。 – hudolejev 2010-06-08 14:33:21

0

在数据库中,我会在,存储主要是因为最新的操作(INTERVAL等)内置方法DATETIME场时间值。一种可能的选择是将UNIX时间戳存储为数值,但我不会建议这样做。如有疑问,请选择标准解决方案。

至于日期格式转换,我一定会用UNIX时间戳(你的情况#1选项,乘以1000我猜)作为最普遍的一个。所有其他格式都是区域性和时区相关的,这是未来很多令人头疼的可能来源。