我正在尝试1899-12-30 19:00:00.000
使用此函数将格式中的给定字符串转换为日期:
$startDate = strtotime("1899-12-30 19:00:00.000");
但结果我得到了错误的日期,例如
30.10.2008 00:00:00
我究竟做错了什么?
我正在尝试1899-12-30 19:00:00.000
使用此函数将格式中的给定字符串转换为日期:
$startDate = strtotime("1899-12-30 19:00:00.000");
但结果我得到了错误的日期,例如
30.10.2008 00:00:00
我究竟做错了什么?
使用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 日之前。上面的代码输出:
-2209093200 1899-12-30 19:00:00
确保在构造函数中将正确的时区设置为DateTimeZone
(或者您可以省略它以将其保留为默认值)。
如果您使用的是 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
日期1899-12-30 19:00:00.000
由 UNIX 时间戳表示-2209096800
,它刚好在 32 位有符号整数的范围之外。在 64 位 PHP 系统上它可以工作,在 32 位系统上你会遇到问题。
使用DateTime
类来表示这样的日期,它可以处理它。