0

知道为什么 strtotime 有时会从月底到下个月吗?

for($i=1;$i<12;$i++)
{
    $d = "Y-$i-t 00:00:00";
    echo "Date as String: " . $d = date($d) . "\n";
    echo "Date as UnixTime: " . strtotime($d) . "\n";
    echo "UnixTime back to String: " . $d = date('Y-m-d 00:00:00', strtotime($d)) . "\n";
    echo "String back to UnixTime: " . strtotime($d) . "\n\n";
}

结果:
日期为字符串:2011-1-31 00:00:00
日期为 UnixTime:1296450000
UnixTime 返回字符串:2011-01-31 00:00:00
字符串返回 UnixTime:1296450000

日期为字符串:2011-2- 31 00:00:00
日期为 UnixTime:1299128400
UnixTime 返回字符串:2011-03-03 00:00:00
字符串返回 UnixTime:1299128400

日期为字符串:2011-3-31 00:00:00
日期为 UnixTime: 1301544000
UnixTime 返回字符串:2011-03-31 00:00:00
字符串返回 UnixTime:1301544000

日期作为字符串:2011-4-31 00:00:00
日期作为 UnixTime:1304222400
UnixTime 返回字符串:2011-05- 01 00:00:00
字符串返回 UnixTime:1304222400

作为字符串的日期:2011-5-31 00:00:00
日期作为 UnixTime:1306814400
UnixTime 返回字符串:2011-05-31 00:00:00
字符串返回 UnixTime:1306814400

日期作为字符串:2011-6-31 00:00:00
日期作为 UnixTime:1309492800
UnixTime 返回字符串: 2011-07-01 00:00:00
字符串返回 UnixTime:1309492800

日期作为字符串:2011-7-31 00:00:00
日期作为 UnixTime:1312084800
UnixTime 返回字符串:2011-07-31 00:00:00
字符串返回 UnixTime:1312084800

日期作为字符串:2011-8-31 00:00:00
日期作为 UnixTime:1314763200
UnixTime 返回字符串:2011-08-31 00:00:00
字符串返回 UnixTime:1314763200

日期作为字符串: 2011-9-31 00:00:00
日期为 UnixTime:1317441600
UnixTime 返回字符串:2011-10-01 00:00:00
字符串返回 UnixTime:1317441600

日期作为字符串:2011-10-31 00:00:00
日期作为 UnixTime:1320033600
UnixTime 返回字符串:2011-10-31 00:00:00
字符串返回 UnixTime:1320033600

日期作为字符串:2011-11-31 00:00:00
日期作为 UnixTime:1322715600
UnixTime 返回字符串:2011-12-01 00:00:00
字符串返回 UnixTime: 1322715600

4

3 回答 3

3

t返回过去日期所在月份的天数(或者,在您的情况下,由于您没有通过日期,因此返回当前月份)。因为您在一月份运行此代码,所以结果将为 31。

2 月没有 31 天,因此 PHP 将添加额外的 3 天,将您移至 3 月 3 日。

于 2011-01-25T22:16:07.150 回答
0

因为并非所有月份都有 31 天。

于 2011-01-25T22:07:51.617 回答
-1

30 天有 9 月、4 月、6 月和 11 月。其余的都有 31 个,除了 2 月有 28 个,有时是 29 个。

于 2011-01-25T22:36:17.230 回答