日期格式转换导致日期错误


Date format conversion results wrong date

我尝试转换

12-18-1997

18-12-1997

使用此代码

$new_date = date('d-m-Y', strtotime('12-18-1997'));

但它导致18-12-1969

如果我必须将完整日期与时间一起转换,那么转换很好,但在我发布的有问题的日期中没有时间。

使用DateTime而不是strtotime():

$date = DateTime::createFromFormat( 'm-d-Y', '12-18-1997');
echo $date->format( 'd-m-Y');

你可以从这个演示中看到它打印:

18-12-1997

strtotime是好的,但它不是通灵的或无所不知的。你给它输入了一个无法正确解析的时间字符串:

php > var_dump(strtotime('12-18-1997'));
bool(false)

由于您只是假设它成功了,所以您将false反馈给date(),在那里它被类型转换为整数0。但是,您的结果是不可能的,因为int 0作为日期是1970年1月1日。对于时区转换,它将是31-12-1969NOT18-12

如果你不能给strtotime一个它能理解的格式,那么使用date_create_from_format并告诉它格式是什么:

$date = date_create_from_format('m-d-Y', '12-18-1997');
$text = date('d-m-Y', $date);