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: 1322715600t
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.
精彩评论