在不使用爆炸的情况下更改1900年之前的日期格式?

时间:2013-09-02 19:19:35

标签: php date

我正在将'd-m-Y'格式转换为'Y-m-d'

目前,我正在使用此代码

$dp_date = '13-12-1901';
$formated_date = date("Y-m-d",strtotime($dp_date));

但未使用14-12-1901之前的日期 并在此日期'13 -12-1901'之后正常工作。

这里的问题是什么? 如何对1900年或14-12-1901之前的日期进行格式化?

2 个答案:

答案 0 :(得分:2)

这是Unix timestamp的已知限制。

如php.net中所述:

strtotime()

  

该函数需要一个包含英文日期的字符串   格式并将尝试将该格式解析为Unix时间戳(   自1970年1月1日00:00:00 UTC以来的秒数,相对于   现在给出的时间戳,或者现在没有提供当前时间。

顺便说一句,如果您只想替换dY的位置,则可以执行此操作 用字符串操作。

<强>更新

  

strtotime()在格林威治标准时间1901年12月13日20:45:54之间有一个范围限制   和周二,2038年1月19日03:14:07 GMT;虽然在PHP 5.1.0之前   某些操作范围仅限于01-01-1970至19-01-2038   系统(Windows)。

@MarkBaker https://stackoverflow.com/a/2872094/998096

他建议“使用PHP的日期时间对象,这些对象可以使用更广泛的日期”。

答案 1 :(得分:1)

只需使用PHP的DateTime类(PHP 5.3+)。它的效果要好得多,并且可以使用更广泛的日期。

一个例子:

$dp_date = '13-12-1901';
$date = new DateTime($dp_date);
echo $date->format('Y-m-d');

应输出:

1901-12-13

<强> Demo!