Comments 13
Спасибо. Тоже давно искал этот аналог =)
попробуем, авось пригодиться :)
у вас опечатка (выделил жирным):
if ($year == 0 && $month == 0 && $day == )
у вас опечатка (выделил жирным):
if ($year == 0 && $month == 0 && $day == )
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()
я конечно понимаю что дата «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
Пример:
TO_DAYS(«99-12-31») = 730484
TO_DAYS(«100-01-01») = 36525 /* 365,25 * 100 ;)*/
TO_DAYS(«1999-12-31») = 730484
Ошибка в этой строке if (($year = $year+1900) < 1900+YY_PART_YEAR)
Исправте на if (($year+1900) < 1900+YY_PART_YEAR)
Исправте на if (($year+1900) < 1900+YY_PART_YEAR)
Не вижу ошибки. Присваивание возвращает результат суммы и увеличивает $year на 1900 одной операцией.
Sign up to leave a comment.
PHP: порт функции TO_DAYS() из MySQL