0

我正在将“dmY”格式转换为“Ymd”

目前,我正在使用此代码

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

但不适用于 14-12-1901 之前的日期,并且在此日期“13-12-1901”作为输入之后可以正常工作。

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

4

2 回答 2

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 之间;尽管在 PHP 5.1.0 之前,此范围在某些操作系统 (Windows) 上被限制在 01-01-1970 到 19-01-2038。

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

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

于 2013-09-02T19:20:28.227 回答
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

演示!

于 2013-09-02T19:40:06.290 回答