При создании расписаний, календарей, и т.п. могут возникать задачи вроде — получить timestamp первого дня этого месяца, или последнего дня следующего и т.п.
В лоб это решается вот так:
1 2 3 4 5 6 7 |
// первый день этого месяца $firstDayOfMonth = strtotime(date('Y-m-01', time())); // первый день следующего месяца $month = date('n', time()) + 1; $year = date('y', time()); $firstDayOfNextMonth = mktime(0,0,0, $month, 1, $year); |
Со следующим месяцем конструкция работает даже если $month выходит за рамки от 1 до 12 — mktime автоматически поправит год и вычислит месяц. Т.е. для 13 — мы получим январь и следующий год.
Элегантный способ
Есть еще «элегантный» способ. PHP даёт нам функцию strtotime(), которая к версии 5.4 сильно поумнела и понимает выражения вроде следующего:
1 2 |
$firstDayOfMonth = strtotime("first day of this month"); $firstDayOfNextMonth = strtotime("first day of next month"); |
Главное, быть аккуратным с тем, что получилось. В предыдущем примере действительно получится первый день текущего/следующего месяца, но время окажется равным текущему (т.е не будет 00:00:00 как ожидается).
Это тоже поправимо:
1 2 |
$firstDayOfMonth = strtotime("first day of this month 00:00"); $firstDayOfNextMonth = strtotime("first day of next month 00:00") |