0

为什么会出现这种奇怪的行为?

我想将此日期2009-02-15创建为我指定的格式,但它显示的年份为1970。为什么会这样?我在 PHP.net 手册上找到了这个例子。

<?php
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n"; //Output is Format: Y-m-!d H:i:s; 1970-01-15 15:16:17
4

3 回答 3

1

为什么它!以精确的格式签名?它不应该在那里。正确的格式是Y-m-d H:i:s,所以:

$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');

- 参见手册页,它解释了!(并且你不需要以精确的格式拥有它)的含义

于 2013-11-07T06:30:00.550 回答
1

那是因为!. 从手册中DateTime::createFromFormat

如果 format 包含字符!,则 format 中未提供的部分生成时间以及 左侧的值!将设置为 Unix 纪元的相应值。

这意味着剩下的任何东西都!将被设置为1970-01-01 00:00:00 UTC。在您的情况下 ( Y-m-!d H:i:s) 这意味着年份和月份将设置为 1970 年 1 月,而日期的其余部分将根据您的字符串设置。

于 2013-11-07T06:30:08.330 回答
1

核实

$date = date('Y-m-d H:i:s',strtotime('2009-02-15 15:16:17'));
echo $date;
于 2013-11-07T06:42:07.627 回答