Php strtotime“四舍五入”月底

时间:2011-01-25 22:04:31

标签: php strtotime

任何想法为什么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返回String: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返回String: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

3 个答案:

答案 0 :(得分:3)

t返回传递日期的月份天数(或者,在您的情况下,因为您没有传递日期,即当前月份)。因为您在1月份运行此代码,结果将是31.

2月没有31天所以PHP会额外增加3天,将你带到3月3日。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

30天有九月,四月,六月和十一月。其他所有人都有31人,除了2月份有28人,有时候有29人。