我刚刚注意到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
Run Code Online (Sandbox Code Playgroud)
这可能只是我愚蠢,但有人可以解释我为什么会这样吗?
h2o*_*ooo 11
t在您的date('Y-m-t')通话中使用时,您指的是:
t- 给定月份的天数
如果你试过,Y-m-d你会发现它是2个不同的日期:
<?php
var_dump( date('Y-m-d') );
var_dump( date('Y-m-d', strtotime('-1 month') ) );
Run Code Online (Sandbox Code Playgroud)
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') ) );
Run Code Online (Sandbox Code Playgroud)
这导致:
string(10)"
2016-03-31"
string(10)"2016-02-29"
试试date('Y-m-d', strtotime("-1 month")),那显示什么?3月2日.为什么?因为2月31日不存在,PHP会进行日期翻转数学运算.
基本问题是"减去一个月"的含义非常含糊不清.什么要当像"二月5.31"土地日发生?没有好的或正确的答案.不要将它留给PHP来决定结果.如果您期望定义的结果,则从一个月的第一个月开始明确扣除一个月.