Comments 60
Ты не рассказал о том как получить русское название месяца, ну там про локаль и все такое.
-8
Это немного не по теме поста, но ничего сложного тут нет:
setlocale(LC_ALL, "ru_RU.UTF-8");
+5
Такие вещи разработчик обязан знать.
-8
Спасибо, ваше мнение важно для нас!
-4
А зачем вы здесь? Только рассказывать своё?
-7
Так стоп.
Автор написал:
>> Мне нужно было получить название предыдущего месяца.
>> $months = array(1=>'Январь','Февраль','Март'...);
А в альтернативном предложенном варианте, не рассказал про локаль и я просто ему об этом напомнил.
Это не значит, что я не считаю это знание тайным или не всем доступным.
Тут появился комментатор с неуместным на мой взгляд комментарием (в свете описанного выше).
Я немного сыронизировал на эту тему, сорри, признаюсь немного раздражаюсь когда в мой с автором тред кто-то влезает с замечанием не по теме.
Прошу прощения за недопонимание в треде и доставленные неудобства, так же приношу извинения всем, кому моя ирония показалась обидной.
Автор написал:
>> Мне нужно было получить название предыдущего месяца.
>> $months = array(1=>'Январь','Февраль','Март'...);
А в альтернативном предложенном варианте, не рассказал про локаль и я просто ему об этом напомнил.
Это не значит, что я не считаю это знание тайным или не всем доступным.
Тут появился комментатор с неуместным на мой взгляд комментарием (в свете описанного выше).
Я немного сыронизировал на эту тему, сорри, признаюсь немного раздражаюсь когда в мой с автором тред кто-то влезает с замечанием не по теме.
Прошу прощения за недопонимание в треде и доставленные неудобства, так же приношу извинения всем, кому моя ирония показалась обидной.
+7
Боюсь, вас сейчас заминусуют. Поделиться одной маленькой проблемой и одним решением — это маловато.
Совет: добавьте больше способов решения этой проблемы, например, через класс DateTime. Опишите плюсы и минусы каждого способа.
Совет: добавьте больше способов решения этой проблемы, например, через класс DateTime. Опишите плюсы и минусы каждого способа.
-5
Лично я пользуюсь подобной конструкцией:
date('F', mktime(0, 0, 0, date('n') - 1, 1));
+5
Чтобы «обнулить» время можно так first day of previous month midnight
0
31.05.2012 +1 month вполне верно выдало 01.07.2012, так как 31.06.2012 не существует.
+1
18 лет назад я получил первый штраф от полцаев — в протоколе стояло 31 июня. Указал им на ошибку, исправили на 30.06. А показав возможность расчётов количества дней в месяца по костяшкам пальцев — штраф был уменьшен в пару раз.
+4
Если подумать, то правильно она работает. Она думает что 31 мая минус 1 месяц возвращает 31 апреля, которого нету и он понимается как 1ое мая.
Кстати например вот ORACLE 31 мая минус 1 месяц вернул 30 апреля.
Кстати например вот ORACLE 31 мая минус 1 месяц вернул 30 апреля.
0
Я не говорю, что функция работает не правильно. Просто при конструкции "-1 month" я ожидаю, что функция будет вычитать месяцы а не дни.
0
31.05 вычитаем месяц получаем 31.04 которое равно 1.05 — такая логика в этой функции видимо.
0
Она вычитает именно месяц, а не дни. Она берет дату, отнимает от текущего месяца (а он 5) 1 и сохраняет ее такой же, а дни _совершенно_ не трогает, как вы и ожидали. и получается 2012-04-31. Или вы не ожидали что пхп нормализует неправильные даты?
+3
Вряд ли. Скорее, у них месяц равен 30 дням.
-3
Нет, человек прав, и месяц равен не 30 дням, иначе февраль бы вообще все вычисления портил. А вы вместо того чтоб подумать немного говорите глупости.
Думаю JS вы понимаете и алгоритм функции прост:
В итоге получается 31 апреля, как и сказал ohifck, но такого числа нет, поэтому эта дата нормализуется в 1 мая.
Думаю JS вы понимаете и алгоритм функции прост:
d = new Date()
d.setMonth( d.getMonth() -1 )
В итоге получается 31 апреля, как и сказал ohifck, но такого числа нет, поэтому эта дата нормализуется в 1 мая.
+4
На похапе тож самое — вот с февралем (29 дней в этом году было)
php > $dt = new DateTime('2012-03-31');
php > $dt->modify('-1 month');
php > var_dump($dt);
object(DateTime)#2 (3) {
["date"]=>
string(19) "2012-03-02 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Moscow"
}
0
Дык это я человеку обьяснил как работает алгоритм этой функции =) Он просто похоже питоном занимается, и я выбрал JS как возможно общий язык. Так во многих языках, нормализация идет чтоб не вызывать ошибки неправильной даты, опять же этим удобно пользоваться:
$dt = new DateTime("$tear-$month-00");
var_dump($dt->format('Y-m-d'));
и вуаля, у нас всегда будет последнее число предидущего месяца! дальше работаем с этми месяцем.
Просто ошибка то на столько наивная =) Или я с JS переработал, там не так много методов для работы с датой.
$dt = new DateTime("$tear-$month-00");
var_dump($dt->format('Y-m-d'));
и вуаля, у нас всегда будет последнее число предидущего месяца! дальше работаем с этми месяцем.
Просто ошибка то на столько наивная =) Или я с JS переработал, там не так много методов для работы с датой.
0
А так реально я представляю в скольких местах у меня код сегодня повалится и сколько плавающих багов объясняется этим. Спасибо за статью — раньше не обращал на это внимания.
+1
Вот из-за таких как вы, PHP-шников называют быдлокодерами. И я вас огорчу.
«В такие моменты каждый PHP-программист начинает изобретать следующий велосипед:»
Нет, в такие моменты php-программист начинает искать причину проблемы, а не изобретать велосипед. А судя из последующей фразы:
«Но мне надоели эти костыльные решения»
Вы именно к этой категории и относитесь, которые строят велосипеды даже не разобравшить в проблеме.
Радует что вам это хоть надоело =)
«В такие моменты каждый PHP-программист начинает изобретать следующий велосипед:»
Нет, в такие моменты php-программист начинает искать причину проблемы, а не изобретать велосипед. А судя из последующей фразы:
«Но мне надоели эти костыльные решения»
Вы именно к этой категории и относитесь, которые строят велосипеды даже не разобравшить в проблеме.
Радует что вам это хоть надоело =)
0
Если бы все проекты оплачивались (ну или хотя бы мотивировались) достаточно, что бы разбираться в таких мелки проблемах, быдлокодеров было бы гораздо меньше.
Если бы да кабы…
Если бы да кабы…
0
Да, на хабре в рабочее время мы можем сидеть, а вот разобраться в проблеме, это мало денег платят и плохо мотивируют =)
Или вас еще нужно мотивировать чтоб вы опыта набирались? Так и не будут платить пока не наберетесь, а набираться вы не хотите потому что недоплачивают… прям замкнутый круг какой-то.
Или вас еще нужно мотивировать чтоб вы опыта набирались? Так и не будут платить пока не наберетесь, а набираться вы не хотите потому что недоплачивают… прям замкнутый круг какой-то.
+2
Вы утрируете.
+1
ua2.php.net/manual/ru/datetime.formats.relative.php
«Замечание:
Относительные значения в месяцах рассчитываются исходя из их продолжительности. Например из „+2 month 2011-11-30“ получится „2012-01-30“, т.к. ноябрь состоит из 30 дней, а декабрь из 31 дня, что в сумме дает 61 день. Это связано с ноября составляет 30 дней в длину, и в декабре является 31 дней в длине, производя в общей сложности 61 дней.»
Даже по русски вам написали в мануале, и переводить не нужно.
Да, я утрирую, просто имел ввиду что мануалы нужно читать, там больше инфы чем на хабре, особенно учитывая что это ваш хлеб
«Замечание:
Относительные значения в месяцах рассчитываются исходя из их продолжительности. Например из „+2 month 2011-11-30“ получится „2012-01-30“, т.к. ноябрь состоит из 30 дней, а декабрь из 31 дня, что в сумме дает 61 день. Это связано с ноября составляет 30 дней в длину, и в декабре является 31 дней в длине, производя в общей сложности 61 дней.»
Даже по русски вам написали в мануале, и переводить не нужно.
Да, я утрирую, просто имел ввиду что мануалы нужно читать, там больше инфы чем на хабре, особенно учитывая что это ваш хлеб
+2
UFO just landed and posted this here
UFO just landed and posted this here
Демонстрация профессионального копипаста?
0
UFO just landed and posted this here
Почему же Вы не ведете мастер классы для быдлокодеров?
Мне Вас очень не хватает.
Мне Вас очень не хватает.
0
UFO just landed and posted this here
Институт закончил Веб программирования =)
Пока Вы будете таким занятым, и не начнете просвещать темноту, 95% php-программистов, так и останутся быдлокодерами с массивами месяцев. Я потратил пол часа своего времени, что бы сообщить людям, которым лень читать мануалы, а более интересно читать о суде над Ассанжем, что есть такая вот возможность. В реальных проектах я очень редко встречаю использование strtotime и уж тем более strftime.
Пока Вы будете таким занятым, и не начнете просвещать темноту, 95% php-программистов, так и останутся быдлокодерами с массивами месяцев. Я потратил пол часа своего времени, что бы сообщить людям, которым лень читать мануалы, а более интересно читать о суде над Ассанжем, что есть такая вот возможность. В реальных проектах я очень редко встречаю использование strtotime и уж тем более strftime.
+2
Человеку нужно было название предидущего месяца
0
UFO just landed and posted this here
сарказм неуместен, на самом деле минимум 50% пхп-шников о проблеме "+1 месяц" не то что не знают, а не подозревают даже, возможно и вы тоже входите в те 50% незнающих, раз такая реакция пошла.
-2
UFO just landed and posted this here
Немного не понял. Разве задача не стояла «узнать какое число было месяц назад»? Если так — то задача решается именно '-1 month', ведь для непоследнего дня месяца 'last day of month' вернет не тоже самое что минус месяц. Поясните?
0
twitter.com/rasmus/status/208157669452816384
twitter.com/rasmus/status/208160760302538752
это определённо не ново.
twitter.com/rasmus/status/208160760302538752
это определённо не ново.
+1
$t = strtotime(date('Y-m-01').' -1 month')
Выдаёт такой же резульат, но без хитрых фразочек на английском ;)
0
Я, может, чего-то не понимаю, но «first day of previous month» это совсем не то же что "-1 month" во всех случаях, кроме первого числа месяца.
0
Может лучше ссылочку вот эту в конце поста поставить?
ru.php.net/manual/en/datetime.formats.relative.php
или
ru.php.net/manual/ru/datetime.formats.relative.php
ru.php.net/manual/en/datetime.formats.relative.php
или
ru.php.net/manual/ru/datetime.formats.relative.php
0
Sign up to leave a comment.
Проблема модификации даты через strtotime