Comments 58
Ожидали увидеть "'2008-02-29' + INTERVAL 1 YEAR, — 2009-02-29"?
+6
Скорее всего, NULL, так как 1500 год не високосный :)
+3
Да, я ожидал 2009-03-01.
Полученный результат тоже по-своему логичен.
Полученный результат тоже по-своему логичен.
+1
На эту тему есть интересное наблюдение — у меня есть двое знакомых, родившихся 29 февраля. В не високосные годы они отмечают день рождения 28 февраля, а не 1 марта, интересно — почему? :)
+1
почему по своему? а по вашему в году должно быть 365 или 364 дней? помоему нельзя заменить день которого просто нет в другом году :)
0
то же самое — сначала перевод годов, а потом нормализация полученной даты.
0
Мне вот это напомнило почему-то
+10
Хм, 29 февраля это вообще адский день, который существует просто для «торможения» календаря относительно истинного вращения Земли вокруг Солнца. То есть через год (365,25 суток) от 29 фераля 2008 года 0:00 будет 1 марта 2009 года 6:00… или 28 февраля? Чёрт, я запутался…
+5
UFO just landed and posted this here
Мне кажется, что это нормльно — последний день месяца остался последним.
+4
UFO just landed and posted this here
select DAYOFYEAR('2008-03-01') — 61
select DAYOFYEAR('2009-03-01') — 60
я в этом году тоже намучался с этим 29-м февраля. Поздравления юзеров с днем рождения на сайте с марта начали отсылаться с ошибкой в день.
запрос был SELECT user_id FROM users WHERE DAYOFYEAR(birthday) = DAYOFYEAR(NOW())
select DAYOFYEAR('2009-03-01') — 60
я в этом году тоже намучался с этим 29-м февраля. Поздравления юзеров с днем рождения на сайте с марта начали отсылаться с ошибкой в день.
запрос был SELECT user_id FROM users WHERE DAYOFYEAR(birthday) = DAYOFYEAR(NOW())
0
Интересно, каков же новый запрос?
0
Может быть сверять месяц и число?)
+2
SELECT user_id FROM users WHERE DATE_FORMAT(birthday, '%m%d') = DATE_FORMAT(NOW(), '%m%d')
0
а надо было как автор прописал
'2008-02-28' + INTERVAL 1 YEAR, — 2009-02-28
'2008-02-29' + INTERVAL 1 YEAR, — 2009-02-28
кто родился в високосный год просто получил бы поздравление 28.02 в невисокосный.
'2008-02-28' + INTERVAL 1 YEAR, — 2009-02-28
'2008-02-29' + INTERVAL 1 YEAR, — 2009-02-28
кто родился в високосный год просто получил бы поздравление 28.02 в невисокосный.
0
UFO just landed and posted this here
А что значит «на год старше»? Может через 365 дней?
0
Если день рождения у меня 5 января, то именно 5 января мне уже +1 год (т.е. вот уже завтра будет 23). 29 февраля нет, но день рождения у человека в феврале, а не в марте, значит берем последний день февраля — 28. Наверное по-этому и принято праздовать ДР именно 28.
Если человек родился 29 февраля, а в невисокосный год ему исполняется 18, то я думаю, что 28 февраля уже можно заниматься сами знаете чем, а не ждать весны ;)
Если человек родился 29 февраля, а в невисокосный год ему исполняется 18, то я думаю, что 28 февраля уже можно заниматься сами знаете чем, а не ждать весны ;)
+3
рожденные 29 февраля должны праздновать 28 февраля а не 1 марта
(те мускул совершенно правильно делает)
понять все достаточно просто астрономический год примерно на 1/4 суток длиннее чем календарный
те в конце года перед первым января прежде чем праздновать в 12 часов надо бы подождать 6 часов и только потом уже открывать бутылки с шампанским
те 1 января наступает на 6 часов раньше чем надо по астрономическому времени
тоже происходит и с 28 февралем оно наступает на 6 часов раньше
те человек родившийся 29 до 6 утра — становится на год старше 28 или 29 числа всегда
с остальными несколько сложнее могут отпраздновать как 28 так и 1 числа
както сложно получилось)
пожалуй проще по закону а не по правде))
(те мускул совершенно правильно делает)
понять все достаточно просто астрономический год примерно на 1/4 суток длиннее чем календарный
те в конце года перед первым января прежде чем праздновать в 12 часов надо бы подождать 6 часов и только потом уже открывать бутылки с шампанским
те 1 января наступает на 6 часов раньше чем надо по астрономическому времени
тоже происходит и с 28 февралем оно наступает на 6 часов раньше
те человек родившийся 29 до 6 утра — становится на год старше 28 или 29 числа всегда
с остальными несколько сложнее могут отпраздновать как 28 так и 1 числа
както сложно получилось)
пожалуй проще по закону а не по правде))
0
странный способ выбора даты… я бы предпочел выбирать
SELECT user_id FROM users WHERE DAYOFMONTH(birthday) = DAYOFMONTH(NOW()) AND MONTH(birthday) = MONTH(NOW())
но в этом случае рожденные 29.02.ХХХХ будут поздравлены раз в четыре года, но при этом ошибки не возникнет.
А еще можно делать в программном коде деление на виды запросов — если високосный год и сегодня 29 февраля, то один способ поиска юзеров, и вторая ветка логики — как у вас (или как я привел)
SELECT user_id FROM users WHERE DAYOFMONTH(birthday) = DAYOFMONTH(NOW()) AND MONTH(birthday) = MONTH(NOW())
но в этом случае рожденные 29.02.ХХХХ будут поздравлены раз в четыре года, но при этом ошибки не возникнет.
А еще можно делать в программном коде деление на виды запросов — если високосный год и сегодня 29 февраля, то один способ поиска юзеров, и вторая ветка логики — как у вас (или как я привел)
0
PostgreSQL
SELECT '2008-02-27'::date + INTERVAL '1 YEAR', -- 2009-02-27 '2008-02-28'::date + INTERVAL '1 YEAR', -- 2009-02-28 '2008-02-29'::date + INTERVAL '1 YEAR', -- 2009-02-28 '2008-02-30'::date + INTERVAL '1 YEAR'; -- 2009-03-01
0
здесь ошибка:
SELECT '2008-02-30'::date + interval '1 year';
ERROR: date/time field value out of range: «2008-02-30»
SELECT '2008-02-30'::date + interval '1 year';
ERROR: date/time field value out of range: «2008-02-30»
-1
Проверил в mssql 2008. Все аналогично! Они сговорились!
— как проверял
select DATEADD(YYYY,1, '20080227')
select DATEADD(YYYY,1, '20080228')
select DATEADD(YYYY,1, '20080229')
select DATEADD(yyyy,1, '20080301')
— как проверял
select DATEADD(YYYY,1, '20080227')
select DATEADD(YYYY,1, '20080228')
select DATEADD(YYYY,1, '20080229')
select DATEADD(yyyy,1, '20080301')
0
в конкретном случае я бы не использовал interval 1 year, как-то алгоритмически $date++ было-бы спокойней.
0
Так, для справки, ГК РФ, ст. 192, ч.3
…
Если окончание срока, исчисляемого месяцами, приходится на такой месяц, в котором нет соответствующего числа, то срок истекает в последний день этого месяца.
+12
если надо прибавить именно дни, прибавьте дни, получите ожидаемый результат, а когда прибавляете именно год, результат тоже ожидаемый, по мне…
0
0
Sign up to leave a comment.
Через год