我刚刚注意到PHP日期函数很奇怪,有人可以解释一下我做错了吗?
以下代码显示相同的结果
<?php
echo date('Y-m-t');
// Outputs last day of this month: 2016-03-31
echo date('Y-m-t', strtotime("-1 month"));
// For some reason outputs the same: 2016-03-31
echo date('Y-m-t', strtotime("+1 month"));
// Outputs 2016-05-31
这可能只是我愚蠢,但有人可以解释我为什么会这样吗?
答案 0 :(得分:11)
在t
来电中使用date('Y-m-t')
时,您指的是:
t
- 给定月份的天数
如果你尝试Y-m-d
,你会发现它有两个不同的日期:
<?php
var_dump( date('Y-m-d') );
var_dump( date('Y-m-d', strtotime('-1 month') ) );
string(10)“
2016-03-31
”
string(10)“2016-03-02
”
要解决此问题,您可以使用strtotime
格式last day of last month
:
<?php
var_dump( date('Y-m-d') );
var_dump( date('Y-m-d', strtotime('last day of last month') ) );
导致:
string(10)“
2016-03-31
”
string(10)“2016-02-29
”
答案 1 :(得分:6)
试试date('Y-m-d', strtotime("-1 month"))
,会显示什么? 3月2日。为什么?因为2月31日不存在,并且PHP会进行日期翻转数学运算。
基本问题是&#34;减去一个月&#34;非常含糊不清。 应该发生什么时候会发生在&#34; 2月31日&#34;?没有好的或正确的答案。不要将它留给PHP来决定结果。如果您期望定义的结果,请从一个月的第一个中明确扣除一个月。