Как стать автором
Обновить

Комментарии 13

Спасибо. Тоже давно искал этот аналог =)
попробуем, авось пригодиться :)

у вас опечатка (выделил жирным):

if ($year == 0 && $month == 0 && $day == )
if ($year == 0 && $month == 0 && $day == )
да что за парсер!!?
if ($year == 0 && $month == 0 && $day == 0)
Спасибо, сразу не заметил. поправлено
floor(($month*4+23)/10) — это формула для вычисления количества лишних дней, получившихся в результате предположения о том, что в каждом месяце 31 день ("$delsum = 365*$year+31*($month-1)+$day;" выше по тексту). Для января и февраля она не работает (выдаёт 2 и 3 дня вместо 0), поэтому там стоит if.
В php есть функция GregorianToJD (http://ru2.php.net/manual/en/function.gregoriantojd.php).
Возвращает количество дней, с начала времен по юлианскому календарю.
Ничто не мешает использовать ее, как аналог TO_DAYS()
> Самым главным критерием было совпадение результатов выполнения функции с результатами TO_DAYS() из MySQL
Но функция действительно полезная. Жаль я ее раньше не заметил. Спасибо
я конечно понимаю что дата «164-11-18» не совсем актуальная )) но у меня ваша функция вернула отличный от MySQl'ной функции результат
Извиняюсь за еще один пост, просто хочу отметить что функция, что эта, что MySQL'ная ведет себя не адекватно на датах года меньше 100. Хотя думаю в подавляющем большинстве задач это маловажно.
Пример:
TO_DAYS(«99-12-31») = 730484
TO_DAYS(«100-01-01») = 36525 /* 365,25 * 100 ;)*/
TO_DAYS(«1999-12-31») = 730484
Моя вина :) так увлекся анализом, что не подумал что мускул просто интерпретирует год 99 как 1999 ))) сорри! :)

Но сообщение ниже прошу учесть… так как ошибку в текущем коде исправить надо!
Ошибка в этой строке if (($year = $year+1900) < 1900+YY_PART_YEAR)
Исправте на if (($year+1900) < 1900+YY_PART_YEAR)
Не вижу ошибки. Присваивание возвращает результат суммы и увеличивает $year на 1900 одной операцией.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации