Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Неточность в функции strtotime()
 
 автор: Sfinks   (31.05.2013 в 15:54)   письмо автору
 
 

Кто-нибудь сталкивался?
Сегодня выяснилось, что
strtotime('-1 month')
вычитает не 1 месяц, а 30 дней. Т.е. сегодня (31 мая)
<?php
  date_default_timezone_set
('Europe/Moscow');
  echo 
date('M');                         // May
  
echo date('M',strtotime('-1 month'));   // May
и даже если уточнить:
<?php
  
echo date('M',strtotime(date('Y-m-d ').'-1 month'));   // все-равно May

Попробовал так:
<?php
  
echo date('M',strtotime('-'.date('t').' day'));
но тогда, если переставить дату на 01.05.2013, то результат - Март, что логично.

Кто-нибудь придумает удобный выход (без if, case и т.п.)?

  Ответить  
 
 автор: Sfinks   (31.05.2013 в 16:06)   письмо автору
 
   для: Sfinks   (31.05.2013 в 15:54)
 

Вот такой вариант вроде корректно работает:
<?php
  
echo date('M',strtotime('-'.date('t',strtotime('-1 day')).' day'));
но как-то он не интуитивен...
Нужно долго смотреть и соображать, чего сколько из чего вычитается.

Может кто-то что-то лучше предложит?

  Ответить  
 
 автор: Igorek   (31.05.2013 в 16:46)   письмо автору
 
   для: Sfinks   (31.05.2013 в 15:54)
 

Видимо такой вопрос возникает ежегодно )))
http://habrahabr.ru/post/144959/
31 апреля == 1 мая, все логично вроде. 31 мая - 1 месяц = 31 апреля, в апреле 30 дней, поэтому смещаемся на один день вперед.

  Ответить  
 
 автор: Sfinks   (03.06.2013 в 10:15)   письмо автору
 
   для: Igorek   (31.05.2013 в 16:46)
 

Забавное решение =) Спасибо!

И я его все же продублирую тут (вдруг кому пригодится)
<?php 
  
echo date('M',strtotime('first day of previous month'));

P.S.
> Видимо такой вопрос возникает ежегодно )))
По идее этот вопрос должен возникать каждые пару месяцев. А пик приходиться на март, т.к. там целых 3 дня для того чтобы с ним столкнуться.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования