开发者

Php strtotime "rounding" end of month

开发者 https://www.devze.com 2023-02-07 04:56 出处:网络
Any idea why strtotime sometimes round the end of the month to the next month? for($i=1;$i<12;$i++)

Any idea why strtotime sometimes round the end of the month to the next month?

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";
}

Results:

Date as String: 2011-1-31 00:00:00

Date as UnixTime: 1296450000

UnixTime back to String: 2011-01-31 00:00:00

String back to UnixTime: 1296450000

Date as String: 2011-2-31 00:00:00

Date as UnixTime: 1299128400

UnixTime back to String: 2011-03-03 00:00:00

String back to UnixTime: 1299128400

Date as String: 2011-3-31 00:00:00

Date as UnixTime: 1301544000

UnixTime back to String: 2011-03-31 00:00:00

String back to UnixTime: 1301544000

Date as String: 2011-4-31 00:00:00

Date as UnixTime: 1304222400

UnixTime back to String: 2011-05-01 00:00:00

String back to UnixTime: 1304222400

Date as String: 2011-5-31 00:00:00

Date as UnixTime: 1306814400

UnixTime back to String: 2011-05-31 00:00:00

String back to UnixTime: 1306814400

Date as String: 2011-6-31 00:00:00

Date as UnixTime: 1309492800

UnixTime back to String: 2011-07-01 00:00:00

String back to UnixTime: 1309492800

Date as String: 2011-7-31 00:00:00

Date as UnixTime: 1312084800

UnixTime back to String: 2011-07-31 00:00:00

String back to UnixTime: 1312084800

Date as String: 2011-8-31 00:00:00

Date as UnixTime: 1314763200

UnixTime back to String: 2011-08-31 00:00:00

String back to UnixTime: 1314763200

Date as String: 2011-9-31 00:00:00

Date as UnixTime: 1317441600

UnixTime back to String: 2011-10-01 00:00:00

String back to UnixTime: 1317441600

Date as String: 2011-10-31 00:00:00

Date as UnixTime: 1320033600

UnixTime back to String: 2011-10-31 00:00:00

String back to UnixTime: 1320033600

Date as String: 2011-11-31 00:00:00

Date as UnixTime: 1322715600

UnixTime back to String: 2011-12-01 00:00:00

String back to UnixTime: 1322715600


t returns the number of days in the month of the date that was passed (or, in your case, since you're not passing a date, the current month). Because you are running this code in January, the result will be 31.

February doesn't have 31 days so PHP will add the extra 3 days moving you to March 3rd.


Because not all months have 31 days.


30 days has September, April, June, and November. All the rest have 31, except February which has 28 and sometimes 29.

0

精彩评论

暂无评论...
验证码 换一张
取 消