0

我正在尝试1899-12-30 19:00:00.000使用此函数将格式中的给定字符串转换为日期:

$startDate = strtotime("1899-12-30 19:00:00.000");

但结果我得到了错误的日期,例如

30.10.2008 00:00:00

我究竟做错了什么?

4

3 回答 3

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 日之前。上面的代码输出

-2209093200 1899-12-30 19:00:00 

确保在构造函数中将正确的时区设置为DateTimeZone(或者您可以省略它以将其保留为默认值)。

于 2012-07-23T13:33:02.183 回答
3

如果您使用的是 PHP 5 >= 5.3.0,您可以像这样使用date_parse_from_formatDocs函数:

$date = "1899-12-30 19:00:00.000";
$dateObj = date_parse_from_format("Y-m-d H:i:s.000",$date);

来源:php.net

于 2012-07-23T13:33:41.050 回答
1

日期1899-12-30 19:00:00.000由 UNIX 时间戳表示-2209096800,它刚好在 32 位有符号整数的范围之外。在 64 位 PHP 系统上它可以工作,在 32 位系统上你会遇到问题。

使用DateTime类来表示这样的日期,它可以处理它。

于 2012-07-23T13:35:32.643 回答