Подписка на блог

В Телеграме помимо ссылок на заметки делюсь околодизайнерскими наблюдениями.

В Твиттере помимо ссылок на заметки пишу всякую чушь.

В Тумблере и Же-же есть автоматические трансляции. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

По РСС и Джейсон-фиду трансляции для автоматических читалок

Боремся с 77 февраля: мой вариант

В общем, вчерашняя моя задачка во многом потеряла смысл, когда Дима Смирнов указал мне на наличие функции checkdate (). Просто когда проблема возникла я не пошёл читать мануал в поисках готовой функции, так как был уверен, что после того, как я намучился с проблемой часовых поясов и летнего времени (и стал мировым экспертом в этой области), я уже по-любому знаю все функции, связанные с датой временем. Оказалось, что я ошибся.

Впрочем, придумывать сложной математики мне не пришлось. Моё решение было однострочным и работало так:

return (gmdate (’Y/n/d’, gmmktime (0, 0, 0, $m, $d, $y)) == $y .’/’. $m .’/’. $d);

Функция mktime умеет делать нормальный «тайм-штамп» из любых входных параметров. Например, если дать ей 25 часов 99 минут 32 декабря 2008 когда, то она вернёт штамп для 2 часов 39 минут 2 января 2009 не поперхнувшись.

Это свойство функции mktime () страшно удобно, потому, что если нужно посчитать, какими будут дата и время через 55 часов, то можно тупо прибавить 55 к часам и забыть про суточные, месячные и годовые переходы, забыть про учёт високосности — функция всё сделает сама.

Короче, критерий правильности даты — то, что функции не пришлось ничего «исправлять». (На самом деле, я уверен, что функция ничего и не исправляет, просто формулы в ней написаны так, чтобы всё работало независимо от корректности входных параметров.) А GMT-версии функций я использую «для надёжности», чтобы нигде часовые пояса не могли что-нибудь испортить.

Сергей Коваленко в комментариях к прошлой заметке предложил это же решение, причём совершенно справедливо не стал проверять день.
Подписаться на блог
Поделиться
Отправить
Популярное