Pull to refresh

Работа с датами

Reading time2 min
Views7.5K
Часто приходится видеть, как начинается настоящий цирк, когда у PHP-программиста доходит дело до дат. Тут и самописные волшебные функции, которые что-то там вычисляют и постоянно спотыкаются на границе месяцев или годов, или на переводе часов на зимнее/летнее время, тут и таинственное использование встроенных функций, с бубнами и плясками.

А надо-то, на самом деле, почти всегда совсем немного.

Под катом — пара полезных, на мой взгляд, советов для начинающих программистов.



Номер раз: strtotime



Все просто: даем этой функции текстовое описание даты, получаем на выходе таймстамп. Хинты здесь такие (это, в общем, для тех, кому лень сходить по ссылке):
1. использование относительных описаний даты (например: "-1month" — текущая дата минус 1 месяц, "+1year +1month" — текущая дата плюс 1 год и 1 месяц)
2. использование второго, необязательного параметра $now — это таймстамп, относительно которого рассчитывается дата. Например, выведем дату — пятницу следующей недели:

$now = strtotime("this sunday");
print strftime("%c", strtotime("next friday", $now));

Почему здесь нельзя было воспользоваться простым strtotime(«next friday»)? Да потому, что если сегодня, скажем, четверг, то strtotime(«next friday») — вернет нам таймстамп ближайшей пятницы — то есть пятницы этой недели, а это не то, что нам нужно (правда, мы могли бы использовать strtotime(«next week friday»), но тсс).

Еще пример. Вычислим дату — первый понедельник следующего месяца.

$next_month_fisrt_day = date("Y-m-01", strtotime("next month"));
$next_month_fisrt_monday_ts = strtotime("this monday", strtotime($next_month_fisrt_day));
print strftime("%c", $next_month_fisrt_monday_ts)."\n";


Номер два: strftime



Эта функция возвращает отформатированную с учетом текущей локали дату в заданном формате. Часто это может помочь, например, отказаться от использования массивов с названиями месяцев — в пользу встроенных возможностей языка.

Happy programming!
Tags:
Hubs:
Total votes 27: ↑12 and ↓15-3
Comments14

Articles