PHP strtotime () разные результаты понедельника на этой неделе - PullRequest
8 голосов
/ 09 марта 2011

У меня проблема с получением даты понедельника на текущей неделе.

echo date('Y-m-d',strtotime('monday this week'));

Когда я запускаю приведенный выше код на моей локальной машине (PHP 5.3), он правильно выводит «2011-03-07», но тот же код на моем сервере (PHP 5.2) выводит «2011-03-14» ( это понедельник на следующей неделе).

Я попытался запустить дату ('W') на обеих машинах и получил одинаковый результат (10).

Редактировать: Есть идеи, как правильно работать?

Заранее спасибо.

Ответы [ 7 ]

8 голосов
/ 22 февраля 2012

Использование date('Y-m-d',strtotime(date('o-\\WW')));

5 голосов
/ 09 марта 2011

Не то чтобы я видел именно эту проблему, но я видел очень похожие.Кажется, что strtotime меняет поведение между различными версиями PHP, и, за исключением простых операций (например, «+1 неделя»), трудно гарантировать, что функциональность останется прежней.

Если вы не можетеОбновление до 5.3, которое, как правильно указано, действительно кажется улучшением, все, что я могу порекомендовать, - это играть с некоторыми перестановками.Часто можно получить правильный ответ из более старых версий strtotime, перефразировав вопрос.Примеры могут включать ...

  • следующий понедельник -1 неделя
  • последний понедельник +1 неделя
  • этот понедельник
3 голосов
/ 09 марта 2011

Да, интерпретация строк в strtotime значительно улучшилась в 5.3.

0 голосов
/ 24 января 2016

Вот еще одно решение, которое работает (на самом деле, единственное, которое сработало для меня):

$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));
0 голосов
/ 31 марта 2015

Посмотрите на это:

"Имейте в виду, что вы не можете полагаться только на эту функцию для проверки даты, поскольку она будет принимать безумные даты, такие как 31 февраля.

Кроме того, сама функция «... недели» может не соответствовать вашим ожиданиям. При использовании в воскресенье «следующая неделя» не будет возвращать метку времени следующего понедельника, но понедельника после этого. Аналогично, временная метка для понедельника текущей недели возвращается, когда используется «предыдущая / последняя неделя», а «эта неделя» возвращает метку понедельника следующей недели (то есть на следующий день). Это не эффект «неделя начинается в воскресенье», поскольку это означало бы, что все возвращенные метки времени должны быть в воскресенье, и ни одна из них не является. "

Если сегодня воскресенье, вы ошибаетесь.

0 голосов
/ 09 марта 2011

У вас есть два варианта: либо избегать использования этой функции проверки, если дата в будущем, если да, вы удаляете ее на 7 дней. Добро пожаловать в чудесный мир PHP.

0 голосов
/ 09 марта 2011

Запустите команду «date» из командной строки cli на сервере и локальном рабочем столе. Это проверит, видит ли ОС одинаковую дату в обеих системах.

...