Php date last monday

strtotime

Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени относительно метки времени, переданной в now, или текущего времени, если аргумент now опущен. В случае ошибки возвращается -1.

Функция strtotime() использует GNU формат даты Date Input Formats, где описывается синтаксис аргумента time.

Проверить работу функции strtotime:

Функция strtotime() может распознавать следующие слова и сокращения.

  • Название месяцев: 12 месяцев и соответствующие сокращения: Январь — January, Февраль — February, Март — March, Апрель — April, Май — May, Июнь — June, Июль — July, Август — August, Сентябрь — September, Октябрь — October, Ноябрь — November, Декабрь — December.
  • Название дней недели: 7 дней и соответствующие сокращения:Понедельник — Monday, Вторник — Tuesday, Среда — Wednesday, Четверг — Thursday, Пятница — Friday, Суббота — Saturday, Воскресенье — Sunday.
  • Название единиц времени: year (год), month (месяц), fortnight (две недели), week (неделя), day (день), hour (час), minute (минута), second (секунда), am (до полудня), рт (после полудня).
  • Некоторые английские слова: ago (тому назад), now (сейчас), last (длиться), next (следующий); this (этот), tomorrow (завтра), yesterday (вчера).
  • Знаки «плюс» и «минус».
  • Все числа.
  • Временные зоны: например, gmt (Greenwich Mean Time — среднее время по Гринвичу) или pdt (Pacific Daylight Time — дневное тихоокеанское время).
Пример 1. Пример использования функции strtotime()
echo strtotime("now"); echo strtotime("22.01.1971 10:11:36"); echo strtotime("10 September 2000"); echo strtotime("+1 day"); echo strtotime("+1 week"); echo strtotime("+1 week 2 days 4 hours 2 seconds"); echo strtotime("next Thursday"); echo strtotime("last Monday"); echo strtotime('Monday this week'); echo strtotime('first day'); echo strtotime('last day next month'); echo strtotime('last day last month'); echo strtotime('2009-12 last day'); // это не сработает, если в обратном порядке год и месяц echo strtotime('2009-03 last day'); echo strtotime('2009-03'); echo strtotime('last day of march 2009'); echo strtotime('last day of march'); echo strtotime('yesterday 14:00'); echo date("d.m.Y",strtotime("first day of previous month")); // первый день прошлого месяца echo date("d.m.Y",strtotime("last day of previous month")); // последний день прошлого месяца echo date("d.m.Y",strtotime("first day of this month")); // первый день текущего месяца echo date("d.m.Y",strtotime("first day of next month")); // первый день следующего месяца echo date('Y-m-d h:i:s',strtotime("-18 hours")); echo strtotime("tomorrow"); # 24 часа от сегодня echo strtotime("now + 24 hours"); echo strtotime("last Saturday"); echo strtotime("8pm + 3 days"); echo strtotime("2 weeks ago"); # две недели назад echo strtotime("next year gmt"); # на один год вперед echo strtotime ("tomorrow 4am"), echo strtotime( date("Y-01-01") ); // начало года echo strtotime( "next day 00:00" ); // начало следующего дня
Пример 2. Проверка ошибок
$str = 'Not Good'; if (($timestamp = strtotime($str)) === -1) < echo "Строка ($str) недопустима"; >else

Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038. Не все платформы поддерживают отрицательные метки времени, поэтому даты ранее 1 января 1970 г. не поддерживаются в Windows, некоторых версиях Linux и некоторых других операционных системах.

Читайте также:  Java 8u51 windows 10

Замечание: GMT формат с помощью strtotime преобразуется некорректно:

$strtotime = strtotime("Tue, 21 May 2013 09:10:30 GMT"); echo date("Y-m-d H:i:s", $strtotime),PHP_EOL; $strtotime = DateTime::createFromFormat("D, d M Y g:i:s O", "Tue, 21 May 2013 09:10:30 GMT"); echo $strtotime->format("Y-m-d H:i:s");

Источник

How to get last Monday in php

How to Speed up Your WordPress Website

How to always get the date last Monday in PHP, for example today is Tuesday 22/05 (Tuesday) and php gets the date 21/05 (Monday).

2 answers

$date = new DateTime("last monday"); 

What would be the last Monday that passed.

object(DateTime)#1 (3) < ["date"]=>string(26) "2018-05-21 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" > 

Use date to format the date according to strtotime informed

 echo date('d/m/Y',strtotime('-1 Monday')); // 21/05/2018 echo date('d-m-Y',strtotime('-1 Monday')); // 21-05-2018 echo date('d/m',strtotime('-1 Monday')); // 21-05 echo date('d-m',strtotime('-1 Monday')); // 21-05 

The strtotime function accepts a string, in the format «US English date», and parse it into a timestamp , making it possible to add dates, get specific days, and count other features.

Last Monday strtotime(‘-1 Monday’);

Last Monday strtotime(«last Monday»);

Next fifth strtotime(«next Thursday»);

Next fifth strtotime(«+1 Thursday»);

Penultimate Monday strtotime(‘-2 Monday’);

Next Monday strtotime(‘+1 Monday’);

Catch the time now strtotime(«now»);

Using a textual date strtotime(«10 September 2017»);

Add a week strtotime(«+1 week»);

Add a week, two days, four hours, and two seconds strtotime(«+1 week 2 days 4 hours 2 seconds»);

Pick today’s date and add 10 days

$now = strtotime("now"); strtotime("+10 day",$now); 

Источник

php strtotime «последний понедельник», если сегодня понедельник?

Я хочу использовать strtotime(«last Monday») .

Дело в том, что если сегодня ПОНЕДЕЛЬНИК, что он возвращается? Кажется, он возвращает дату в понедельник на прошлой неделе. Как я могу заставить его вернуть сегодняшнюю дату в этом случае?

Как я могу заставить его вернуть сегодняшнюю дату в этом случае?

if (today == monday) return today; else return strtotime(. ); 

Кстати, этот трюк также мог бы работать:

strtotime('last monday', strtotime('tomorrow')); 

Если вы прочитали руководство, есть отличный пример, который точно описывает, что вы хотите сделать http://www.php.net/manual/en/datetime.formats.relative.php

strtotime('Monday this week'); 

Обновление: похоже, в новых версиях PHP появилась ошибка, на которой на this week возвращается неправильная неделя, когда она запускалась по воскресеньям. Вы можете проголосовать за ошибку здесь: https://bugs.php.net/bug.php?id=63740

Обновление 2: с 18 мая 2016 года это было исправлено в PHP 5.6.22, PHP 7.0.7 и PHP 7.1-dev (и, надеюсь, остается исправленным в последующих выпусках), как показано здесь: https://bugs.php.net /bug.php?id=63740#1463570467

Если сегодня понедельник, strtotime («последний понедельник») вернет дату 7 дней в прошлом. Почему бы вам просто не проверить, является ли сегодня понедельник, и если да, верните сегодняшнюю дату, а если нет, вернитесь на прошлой неделе?

Читайте также:  Java get line in string

Это было бы надежным способом сделать это.

if (date('N', time()) == 1) return date('Ym-d'); else return date('Ym-d', strtotime('last Monday')); 

Поздний ответ, но я подумал, что я опубликую этот ответ (что на самом деле связано с другим, но связанным с ним вопросом). Он обрабатывает сценарий в вопросе:

function last_monday($date) < if (!is_numeric($date)) $date = strtotime($date); if (date('w', $date) == 1) return $date; else return strtotime( 'last monday', $date ); >echo date('m/d/y', last_monday('8/14/2012')); // 8/13/2012 (tuesday gives us the previous monday) echo date('m/d/y', last_monday('8/13/2012')); // 8/13/2012 (monday throws back that day) echo date('m/d/y', last_monday('8/12/2012')); // 8/06/2012 (sunday goes to previous week) 

… или вариант, который воскреснет на следующий день (в понедельник), а не на предыдущую неделю, просто добавьте строку:

 elseif (date('w', $date) == 0) return strtotime( 'next monday', $date ); 

Вы можете передать ему временную метку или строку, вы вернете отметку времени

Документация

Как было правильно указано в предыдущем ответе , этот трюк работает, но также были предостережения до PHP 5.6.22 , PHP 7.0.7 и PHP 7.1-dev :

strtotime('last monday', strtotime('tomorrow')); // or this one, which is shorter, but was buggy: strtotime('Monday this week'); 

Для тех, кто предпочитает «Jedy-way», для работы с объектами класса DateTime , решение следующее:

(new \DateTime())->modify('tomorrow')->modify('previous monday')->format('Ym-d'); 

или даже более короткие обозначения:

Будьте осторожны, потому что если вы делаете то же самое на SQL, вам не нужно иметь какие-либо из этих трюков в mysql с добавлением «завтра». Вот как будет выглядеть решение:

SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) as last_monday; 

В зависимости от того, для чего вы его используете, это может быть полезно. Поскольку двусмысленность одной секунды в порядке для моих требований, я использую:

date( 'Ymd 23:59:59', strtotime( 'last sunday' )) 

получить полночь в последний понедельник (или сегодня, если сегодня – понедельник).

date_default_timezone_set('Europe/Berlin'); function givedate($weekday, $time) < $now = time(); $last = strtotime("$weekday this week $time"); $next = strtotime("next $weekday $time"); if($now >$last) < $date = date("dmY - H:i",$next); >else < $date = date("dmY - H:i",$last); >return $date; > echo givedate('Wednesday', '00:52'); 
 function givedate_monthly($weekday, $time) < $now = time(); $last = strtotime("first $weekday of this month $time"); $next = strtotime("first $weekday of next month $time"); if($now >$last) < $date = date("dmY - H:i",$next); >else < $date = date("dmY - H:i",$last); >return $date; > echo givedate_monthly('Wednesday', '01:50'); 
$monday = strtotime('Monday last week'); $sunday = strtotime('+6 days', $monday); 

Источник

strtotime

Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970 г. 00:00:00 UTC) относительно метки времени, переданной в now , или текущего времени, если аргумент now опущен.

Каждый параметр функции использует временную метку по умолчанию, пока она не указана в этом параметре напрямую. Будьте внимательны и не используйте различные временные метки в параметрах, если на то нет прямой необходимости. Обратите внимание на date_default_timezone_get() для задания временной зоны различными способами.

Читайте также:  Copy sheet excel python

Список параметров

Строка даты/времени. Объяснение корректных форматов дано в Форматы даты и времени.

Временная метка, используемая в качестве базы для вычисления относительных дат.

Возвращаемые значения

Возвращает временную метку в случае успеха, иначе возвращается FALSE . До версии PHP 5.1.0 в случае ошибки эта функция возвращала -1.

Ошибки

Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE , и/или ошибку уровня E_STRICT или E_WARNING при использовании системных настроек или переменной окружения TZ . Смотрите также date_default_timezone_set()

Список изменений

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE .

Примеры

Пример #1 Пример использования функции strtotime()

echo strtotime ( «now» ), «\n» ;
echo strtotime ( «10 September 2000» ), «\n» ;
echo strtotime ( «+1 day» ), «\n» ;
echo strtotime ( «+1 week» ), «\n» ;
echo strtotime ( «+1 week 2 days 4 hours 2 seconds» ), «\n» ;
echo strtotime ( «next Thursday» ), «\n» ;
echo strtotime ( «last Monday» ), «\n» ;
?>

Пример #2 Проверка ошибок

// до версии PHP 5.1.0 вместо false необходимо было сравнивать со значением -1
if (( $timestamp = strtotime ( $str )) === false ) echo «Строка ( $str ) недопустима» ;
> else echo » $str == » . date ( ‘l dS \o\f F Y h:i:s A’ , $timestamp );
>
?>

Примечания

Замечание:

Если количество лет указано двумя цифрами, то значения 00-69 будут считаться 2000-2069, а 70-99 — 1970-1999. Смотрите также замечания ниже о возможных различиях на 32-битных системах (допустимые даты заканчиваются 2038-01-19 03:14:07).

Замечание:

Корректным диапазоном временных меток обычно являются даты с 13 декабря 1901 20:45:54 UTC по 19 января 2038 03:14:07 UTC. (Эти даты соответствуют минимальному и максимальному значению 32-битового знакового целого).

До версии PHP 5.1.0, не все платформы поддерживают отрицательные метки времени, поэтому поддерживаемый диапазон дат может быть ограничен Эпохой Unix. Это означает, что даты ранее 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и нескольких других операционных системах.

В 64-битных версиях PHP корректный диапазон временных меток фактически бесконечен, так как 64 битов хватит для представления приблизительно 293 миллиарда лет в обоих направлениях.

Замечание:

Даты в формате m/d/y или d-m-y разрешают неоднозначность с помощью анализа разделителей их элементов: если разделителем является слеш (/), то дата интерпретируется в американском формате m/d/y, если же разделителем является дефис () или точка (.), то подразумевается использование европейского форматаd-m-y.

Чтобы избежать потенциальной неоднозначности, рекомендуется использовать даты в формате стандарта ISO 8601 (YYYY-MM-DD) либо пользоваться функцией DateTime::createFromFormat() там, где это возможно.

Замечание:

Не рекомендуется использовать эту функцию для математических операций. Целесообразней использовать DateTime::add() и DateTime::sub() начиная с PHP 5.3, или DateTime::modify() в PHP 5.2.

Смотрите также

  • Форматы даты и времени
  • DateTime::createFromFormat() — Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
  • checkdate() — Проверяет корректность даты по григорианскому календарю
  • strptime() — Разбирает строку даты/времени сгенерированную функцией strftime

Источник

Оцените статью