我已经在PHP开发工作了5年,但之前从未见过这种类型的错误。
我的日期是该月的最后一天,我将使用以下代码更改其格式:
$data['toDate'] = "2017-04-31";
echo $data['toDate']." : ".date('d-m-Y',strtotime($data['toDate']))." ### ";
die;
输出:
2017-04-31 00:00:00:01-05-2017 ###
我正在使用PHP 5.6.25版。 有没有人可以帮助我?
答案 0 :(得分:2)
4月31日不存在。因为PHP将在4月30日之后的那天发生。
答案 1 :(得分:1)
四月只有30天,所以它实际上正在纠正您使用的日期。第31届真的是5月1日。
答案 2 :(得分:0)
输入错误,而不是date()
。
$data['toDate'] = "2017-04-31";// no 31st in 4th(April) month
echo $data['toDate'] ." : ". date('d-m-Y',strtotime($data['toDate']))." ### ";
die;
它只显示下一个日期01-05-2017
答案 3 :(得分:0)
04-31有效但技术上不是April中的日期,因为April只有30天,因此strtotime()会产生05-01。
如果您查看strtotime()的文档,您会看到第一个参数是:
<强>时间强>
中说明
日期/时间字符串。有效格式在Date and Time Formats。
如果您点击日期和时间格式的链接并转到Date Formats,您会看到:
因此,对于日期格式(即 DD ),01-31有效(因为 3 后面只能跟一个 0 或 1 )尽管有一个月。根据提供的月份和日期值,将调整日期。
也可以在同一页的注释中找到:
注意强>:
可以对 dd 和 DD 格式进行上下颠倒。第0天表示上个月的最后一天,而溢出计入下个月。这使得&#34; 2008-08-00&#34;相当于&#34; 2008-07-31&#34;和&#34; 2008-06-31&#34;相当于&#34; 2008-07-01&#34; (六月只有30天)。 1
因此 04-31 有效但溢出。
此外,在User Contributed Notes部分,note by Mirek at 2015-04-01 01:14可能有用/有趣:
注意:首先检查日期(dd或DD)的范围0..31,并且只有在适合的情况下,才可以应用上溢和下溢机制。如果没有,strtotime()只返回false。 如果您需要无限制的上/下限进行日期计算(例如2015-01-40至2015-02-09),请改用mktime()。 2
1 <子> http://php.net/manual/en/datetime.formats.date.php 子>
2 <子> http://php.net/manual/en/datetime.formats.date.php#Hcom117014 子>