PHP: strtotime() 没有添加正确的天数



我有命令date('d.m.y', strtotime('22.02.21 +1 days'))。预期的输出是23.02.21,然而我得到的是26.02.21。它增加了四天,而不是一天。当尝试添加两天时,它会添加五天。

使用不同的日期格式(即date('d.m.y', strtotime('02/22/21 +1 days')))工作,但我想使用这种日期格式,如果可能的话。

是否有办法使strtotime()工作与这种格式?

根据https://www.php.net/manual/en/function.strtotime.php.

strtotime期望得到一个包含英文日期格式的字符串并尝试将该格式解析为Unix时间戳。

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

但是,如果年份以两位数格式给出,并且分隔符是一个破折号(-)或一个明显的点(.),日期字符串解析为y-m-d。

date("d.m.y", strtotime("2021-02-22 +1 day"))

为避免混淆,最好使用年份为4位的日期

date('d.m.y', strtotime('22.02.2021 +1 days'))

最后,为了避免潜在的歧义,最好在可能的情况下使用ISO 8601 (YYYY-MM-DD)日期或DateTime::createFromFormat()。

如果年份是两位数,那么无论如何都需要消除世纪的歧义。使用四位数字的年份也可以。

在这个例子中,从70开始的年份都被认为是20世纪的年份,而其他年份都是21世纪的年份。

$inputDate = '22.02.21';
$year = substr($inputDate, 6);
if ( $year > 69 ) {
$year = '19' . $year;
} else {
$year = '20' . $year;
}
$date = substr($inputDate, 0, 6) . $year;
echo date("d.m.y", strtotime($date . ' +1 day'));

沙箱示例:http://sandbox.onlinephpfunctions.com/code/14a79178f8909f3078666ae630163fa7c943cff1

最新更新