PHP:strtotime()始终返回01/01/1970

5

我想使用strtotime函数将日期以欧洲格式(dd/mm/yyyy)显示出来,但它总是返回01/01/1970。

这是我的代码行:

echo "<p><h6>".date('d/m/Y', strtotime($row['DMT_DATE_DOCUMENT']))."</h6></p>";

在我的数据库中,字段是varchar类型的,记录格式为yyyy.mm.dd

我使用相同的代码行用于另一个字段,其格式为yyyy-mm-dd(也是varchar类型),并且它可以正常工作。

感谢您的帮助。


这可能是因为strtotime假定日期格式为mm/dd/yyyy,如果您输入一个像13/2/2012这样的日期,它会抱怨没有第13个月,并给您时间0(1/1/1970)。 - Bailey Parker
3个回答

4

由于格式yyyy-mm-dd是有效的,请尝试将.替换为-

date('d/m/Y', strtotime(str_replace('.', '-', $row['DMT_DATE_DOCUMENT'])));

3

请尝试以下方法:

$date = date_parse_from_format("Y.m.d", $row['DMT_DATE_DOCUMENT']);
$time = mktime($date['hour'], $date['minute'], $date['second'], $date['month'], $date['day'], $date['year']);
echo "<p><h6>".date('d/m/Y', $time)."</h6></p>";

(使用date_parse_from_format()代替strtotime())

或者只需:

$date = date_parse_from_format("Y.m.d", $row['DMT_DATE_DOCUMENT']);
echo "<p><h6>{$date['day']}/{$date['month']}/{$date['year']}</h6></p>";

1
是的,只有 date 不接受 date_parse_from_format 的直接输出。 - deceze

3

引用自PHP手册中的strtotime页面

以m/d/y或d-m-y格式表示的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),则假定为美国的m/d/y格式;而如果分隔符是破折号(-)或点(.),则假定为欧洲的d-m-y格式。

为避免潜在的歧义,最好使用ISO 8601(YYYY-MM-DD)日期或DateTime::createFromFormat()

因此,在您的情况下,应该采用YYYY-MM-DD或d.m.y格式。

如果您想解析自定义格式,则使用date_create_from_format

例如,

date_create_from_format('Y.m.d',$row['DMT_DATE_DOCUMENT'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接