我正在尝试使用此函数将格式为1899-12-30 19:00:00.000
的给定字符串转换为日期:
$startDate = strtotime("1899-12-30 19:00:00.000");
但结果我的日期错了,例如
30.10.2008 00:00:00
我做错了什么?
答案 0 :(得分:4)
使用DateTime
:
$date = DateTime::createFromFormat( 'Y-m-d H:i:s.u', '1899-12-30 19:00:00.000', new DateTimeZone( 'America/New_York'));
echo $date->getTimestamp() . ' ' . $date->format( 'Y-m-d H:i:s');
请注意,这将是一个负值,因为它是在1970年1月1日之前。上面的代码outputs:
-2209093200 1899-12-30 19:00:00
确保在构造函数中将正确的时区设置为DateTimeZone
(或者您可以省略它以保留默认值)。
答案 1 :(得分:3)
如果您使用的是PHP 5> = 5.3.0,则可以使用date_parse_from_format
Docs这样的函数:
$date = "1899-12-30 19:00:00.000";
$dateObj = date_parse_from_format("Y-m-d H:i:s.000",$date);
来源:php.net
答案 2 :(得分:1)
日期1899-12-30 19:00:00.000
由UNIX时间戳-2209096800
表示,它刚好在32位有符号整数的范围之外。在64位PHP系统上它可以工作,在32位系统上你会遇到问题。
使用DateTime
类来表示此类日期,它可以处理它。