Столкнулся с буржуями и мой моск порвало.
Есть допустим:
31-01-2014
нужно прибавить 1 месяц, по классическому матану это будет 03.03.2014
Но у буржуев другая математика у них 1 месяц в данном случае будет 28-02-2014
как на пыхе учесть такую крутую математику?

Еще пример 28-01-2014 + 1 месяц = 28-02-2014
Интересны ваши предложения.
Цитата |
31-01-2014 нужно прибавить 1 месяц, по классическому матану это будет 03.03.2014 |
это как так?
а вот что по этому поводу думает MySQL точнее её разработчики
Цитата |
При использовании некорректных значений дат результат будет равен NULL. Если при суммировании MONTH, YEAR_MONTH или YEAR номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца:
mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH); -> 1998-02-28 |
I++ месяц величина не постоянная, следовательно нужно выделить что для твоей задачи будет приоритет, т.е. ты можешь делать так: 31-01-2014 + (кол. дней в следующем месяце), а может тебе нужно переводить месяц в процент и вычислять примерную дату текущей даты и находить приблизительную дату полученного месяца, или просто смотреть существование числа в другом месяце и если такого числа нет, приводить его к последней дате полученного месяца.
Invis1ble
9.12.2014 - 19:41
Цитата |
как на пыхе учесть такую крутую математику? |
какую "такую"? ты определись, как ты хочешь считать - прибавлять месяц или прибавлять определенное кол-во дней
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1ble
9.12.2014 - 19:43
$interval = new DateInterval('P1M');
$date = new DateTime('31-01-2014');
var_dump($date->add($interval));
$date = new DateTime('28-01-2014');
var_dump($date->add($interval));
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Хочу так:
01-01-2014 + 1 месяц = 28-02-2014
28-01-2014 + 1 месяц = 28-02-2014
31-01-2014 + 3 месяца = 30-04-2014
01-01-2014 + 3 месяца = 01-04-2014
S.Chushkin
9.12.2014 - 19:52
Цитата (I++ @ 9.12.2014 - 19:14) |
Интересны ваши предложения. |
Делайте как в mySQL - не ошибётесь.
select '2014-01-31' + interval 1 month
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Invis1ble
9.12.2014 - 19:54
недавно писал код для построения финансовых отчетов с различными группировками и фильтрами, тоже знатно мозг вынес себе
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1ble, дак вот я тоже сижу думаю, как вот это победить:
01-01-2014 + 1 месяц = 28-02-2014
28-01-2014 + 1 месяц = 28-02-2014
31-01-2014 + 3 месяца = 30-04-2014
01-01-2014 + 3 месяца = 01-04-2014
S.Chushkin
это кажется, то что нужно, но мускуль мне не нужен.
Invis1ble
9.12.2014 - 19:58
Цитата |
01-01-2014 + 1 месяц = 28-02-2014 28-01-2014 + 1 месяц = 28-02-2014 |
Invis1ble
9.12.2014 - 20:00
мускул вот что выдает:
'2014-01-01' + interval 1 month | '2014-01-28' + interval 1 month | '2014-01-31' + interval 3 month | '2014-01-01' + interval 3 month
2014-02-01 | 2014-02-28 | 2014-04-30 | 2014-04-01
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Цитата |
да ты же упоротый laugh.gif |
Не не, просто буржуи именно так считают:
01-01-2014 + 1 месяц = 28-02-2014
28-01-2014 + 1 месяц = 28-02-2014
Точнее в одной негерийской стране
I++, обычно в ситуациях когда нет четкого алгоритма я прошу привести требования заказчика. Перечислите требования заказчика, что он хочет, не надо углубляться в детали, просто что хочет заказчик. Если это для себя, то тоже сформируйте требования. На данный момент я не вижу каких-то внятных требований.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Да да, я понял, что тут упоротость полная. Кароч если решу проблему, то выложу сюда решение.
Цитата |
Кароч если решу проблему, то выложу сюда решение. |
Цитата (Invis1ble @ 9.12.2014 - 18:58) |
да ты же упоротый |
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.