将字符串转换为日期


Convert String To Date

我正在尝试使用以下函数将格式为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_formatDocs函数,如下所示:

$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类来表示这样的日期,它可以处理它。