Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php datetime add 1 day

DateTime::add

(PHP 5 >= 5.3.0, PHP 7)

DateTime::add — date_add — Добавляет заданное количество дней, месяцев, лет, часов, минут и секунд к объекту DateTime

Описание

Прибавляет заданный объект DateInterval к объекту DateTime.

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

Только для процедурного стиля: Объект DateTime, возвращаемый date_create() . Функция изменяет этот объект.

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

Возвращает объект DateTime для применения в цепи методов или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования DateTime::add()

Результат выполнения данных примеров:

Пример #2 Другие примеры с DateTime::add()

add (new DateInterval ( ‘PT10H30S’ ));
echo $date -> format ( ‘Y-m-d H:i:s’ ) . «n» ;

$date = new DateTime ( ‘2000-01-01’ );
$date -> add (new DateInterval ( ‘P7Y5M4DT4H3M2S’ ));
echo $date -> format ( ‘Y-m-d H:i:s’ ) . «n» ;
?>

Результат выполнения данного примера:

Пример #3 Будьте внимательны при добавлении месяцев

add ( $interval );
echo $date -> format ( ‘Y-m-d’ ) . «n» ;

$date -> add ( $interval );
echo $date -> format ( ‘Y-m-d’ ) . «n» ;
?>

Результат выполнения данного примера:

Примечания

При работе с PHP 5.2 в качестве альтернативы можно воспользоваться функцией DateTime::modify() .

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

  • DateTime::sub() — Вычитает заданное количество дней, месяцев, лет, часов, минут и секунд из времени объекта DateTime
  • DateTime::diff() — Возвращает разницу между двумя объектами DateTime
  • DateTime::modify() — Изменение временной метки

User Contributed Notes 10 notes

Another simple solution to adding a month but not autocorrecting days to the next month is this.
(Also works for substracting months)

$dt = new DateTime(«2016-01-31»);

$oldDay = $dt->format(«d»);
$dt->add(new DateInterval(«P1M»)); // 2016-03-02
$newDay = $dt->format(«d»);

if($oldDay != $newDay) <
// Check if the day is changed, if so we skipped to the next month.
// Substract days to go back to the last day of previous month.
$dt->sub(new DateInterval(«P» . $newDay . «D»));
>

echo $dt->format(«Y-m-d»); // 2016-02-29

Hope this helps someone.

Here is a solution to adding months when you want 2014-10-31 to become 2014-11-30 instead of 2014-12-01.

format ( ‘Y-n-j’ );
list( $y , $m , $d ) = explode ( ‘-‘ , $date );

$last_day = date ( ‘t’ , strtotime ( » $y — $m -1″ ));
if ( $d > $last_day )
<
$d = $last_day ;
>

$this -> setDate ( $y , $m , $d );
>

If you need add() and sub() that don’t modify object values, you can create new methods like this:

add ( $interval );
return $dt ;
>

public function returnSub ( DateInterval $interval )
<
$dt = clone $this ;
$dt -> sub ( $interval );
return $dt ;
>

$interval = DateInterval :: createfromdatestring ( ‘+1 day’ );

$dt = new DateTimeEnhanced ; # initialize new object
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-12T15:01:44+02:00

$dt -> add ( $interval ); # this modifies the object values
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-13T15:01:44+02:00

$dtNew = $dt -> returnAdd ( $interval ); # this returns the new modified object and doesn’t change original object
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-13T15:01:44+02:00
echo $dtNew -> format ( DateTime :: W3C ) . «n» ; # 2013-09-14T15:01:44+02:00

Be careful that the internal timer to your DateTime object can be changed drastically when adding even 1 second, during the switch from DST to normal.
Consider the following:
setTimeZone (new DateTimeZone ( ‘EST5EDT’ )); /* a timezone effectuating the change */
$second = new DateInterval ( ‘PT1S’ ); /* one second */

echo $ts . «t» . $dst -> format ( «UtY-m-d H:i:s T» ) . «n» ;

$dst -> add ( $second );
$ts ++;

echo $ts . «t» . $dst -> format ( «UtY-m-d H:i:s T» ) . «n» ;

/* results:
1383458399 1383458399 2013-11-03 01:59:59 EDT
1383458400 1383462000 2013-11-03 02:00:00 EST

noticed how the second column went from 1383458399 to 1383462000 even though only 1 second was added?
*/

If you use fraction of seconds, you may have surprises. It only occurs when the sum of the floating point parts results in exactly 1 second (0.5 + 0.5 ou 0.3 + 0.7, for example). See these cases at intervals slightly bigger than 1 second:

f = 0.600 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora is correct: «2017-12-31T23:59:59.900»

f = 0.800 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora is correct: «2018-01-01T00:00:00.100»

f = 0.700 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora has «2017-12-31T23:59:59.1000»

To resolve, add 1 second to the interval and f property must be negative (-1.0 plus original value):

f = — 0.300 ; // = -1.0 + 0.700
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora is correct: «2018-01-01T00:00:00.000»

What you can do with this function/method is a great example of the philosophy: «just because you can do it doesn’t mean you should». I’m talking about two issues: (1) the number of days in the month which varies from months 1-12 as well as for month 2 which could be leap year (or not); and then issue (2): what if there is the need to specify a large quantity of an interval such that it needs to be re-characterized into broader-scoped intervals (i.e. 184 seconds ==> 3 minutes-4 seconds). Examples in notes elsewhere in the docs for this function illustrate both issues and their undesired effects so I won’t focus on them further. But how did I decide to handle? I’ve gone with four «public» functions and a single «private» function, and without giving you a bunch of code to study, here are their summaries.

3. function addTime(int $days, int $hours, int $minutes, int $seconds)<
// I use date_add and create a DateInterval object from the corresponding string spec (created from the args passed to this function). Note that months and years are excluded due to the bad side-effects already mentioned elsewhere.

4. function subtractTime(int $days, int $hours, int $minutes, int $seconds)<
//notes for «addTime» also apply to this function but note that I like separate add and subtract functions because setting the DateInterval property flag to indicate add/subtract is not as intuitive for future coding.

**Results/goals.
—any number of days/hours/minutes/seconds can be passed in to add/subtractTime and all of «Y/M/D/H/M/S» values get adjusted as you would expect.
—using adjustYear/Month lets you pass +/- values and only «Y/M» values get modified without having undesirable effects on day values.
—a call to the «recharacterize» function helps ensure proper and desired values are in the intervals prior to calling date_add to let it do its work.

Be careful when using this function, I may have happened upon a bug in PHP7.

My code is as follows

//get date from post or else fill with today’s date
if (isset($_POST[«from»]))
<
$from = date_create($_POST[«from»]);
>else<
$from = date_create(date(«Y-m-d»));
>

//get date from post if there isn’t one just take the same date as what is in the $from variable and add one day to it
if (isset($_POST[«to»]))
<
$to = date_create($_POST[«to»]);
>else <
$to = $from;
date_modify($to, ‘+1 day’);
>
echo(date_format($from, ‘Y-m-d’) . » » . date_format($to, ‘Y-m-d’));

The resultant output is
$from = 2015-12-11
$to = 2015-12-11

In actuality the result should be
$from = 2015-12-10
$to = 2015-12-11

For some reason the code above modifies the $from variable in the line date_modify($to, ‘+1 day’); even though it shouldn’t as the $from variable isn’t being modified.

to fix this i needed to change the code to

//get date from post or else fill with today’s date
if (isset($_POST[«from»]))
<
$from = date_create($_POST[«from»]);
>else<
$from = date_create(date(«Y-m-d»));
>

//get date from post if there isn’t one just take the same date as what is in the $from variable and add one day to it
if (isset($_POST[«to»]))
<
$to = date_create($_POST[«to»]);
>else <
$to = date_create(date(«Y-m-d»));
date_modify($to, ‘+1 day’);
>
echo(date_format($from, ‘Y-m-d’) . » » . date_format($to, ‘Y-m-d’));

Читать еще:  Matlab plot толщина линии

This isn’t strictly the code I wanted. Possible bug?

DateTime::add

(PHP 5 >= 5.3.0, PHP 7)

DateTime::add — date_add — Добавляет заданное количество дней, месяцев, лет, часов, минут и секунд к объекту DateTime

Описание

Прибавляет заданный объект DateInterval к объекту DateTime.

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

Только для процедурного стиля: Объект DateTime, возвращаемый date_create() . Функция изменяет этот объект.

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

Возвращает объект DateTime для применения в цепи методов или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования DateTime::add()

Результат выполнения данных примеров:

Пример #2 Другие примеры с DateTime::add()

add (new DateInterval ( ‘PT10H30S’ ));
echo $date -> format ( ‘Y-m-d H:i:s’ ) . «n» ;

$date = new DateTime ( ‘2000-01-01’ );
$date -> add (new DateInterval ( ‘P7Y5M4DT4H3M2S’ ));
echo $date -> format ( ‘Y-m-d H:i:s’ ) . «n» ;
?>

Результат выполнения данного примера:

Пример #3 Будьте внимательны при добавлении месяцев

add ( $interval );
echo $date -> format ( ‘Y-m-d’ ) . «n» ;

$date -> add ( $interval );
echo $date -> format ( ‘Y-m-d’ ) . «n» ;
?>

Результат выполнения данного примера:

Примечания

При работе с PHP 5.2 в качестве альтернативы можно воспользоваться функцией DateTime::modify() .

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

  • DateTime::sub() — Вычитает заданное количество дней, месяцев, лет, часов, минут и секунд из времени объекта DateTime
  • DateTime::diff() — Возвращает разницу между двумя DateTime объектами
  • DateTime::modify() — Изменение временной метки

Коментарии

adding 15 min to a datetime

add (new DateInterval ( «PT15M» ));
echo $initDate -> format ( «Y/m/d m:i:s» ); //result: 2010/08/24 08:15:00
?>

period time:
PT1H2M3S

If you need add() and sub() that don’t modify object values, you can create new methods like this:

add ( $interval );
return $dt ;
>

public function returnSub ( DateInterval $interval )
<
$dt = clone $this ;
$dt -> sub ( $interval );
return $dt ;
>

$interval = DateInterval :: createfromdatestring ( ‘+1 day’ );

$dt = new DateTimeEnhanced ; # initialize new object
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-12T15:01:44+02:00

$dt -> add ( $interval ); # this modifies the object values
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-13T15:01:44+02:00

$dtNew = $dt -> returnAdd ( $interval ); # this returns the new modified object and doesn’t change original object
echo $dt -> format ( DateTime :: W3C ) . «n» ; # 2013-09-13T15:01:44+02:00
echo $dtNew -> format ( DateTime :: W3C ) . «n» ; # 2013-09-14T15:01:44+02:00

Be careful that the internal timer to your DateTime object can be changed drastically when adding even 1 second, during the switch from DST to normal.
Consider the following:
setTimeZone (new DateTimeZone ( ‘EST5EDT’ )); /* a timezone effectuating the change */
$second = new DateInterval ( ‘PT1S’ ); /* one second */

echo $ts . «t» . $dst -> format ( «UtY-m-d H:i:s T» ) . «n» ;

$dst -> add ( $second );
$ts ++;

echo $ts . «t» . $dst -> format ( «UtY-m-d H:i:s T» ) . «n» ;

/* results:
1383458399 1383458399 2013-11-03 01:59:59 EDT
1383458400 1383462000 2013-11-03 02:00:00 EST

noticed how the second column went from 1383458399 to 1383462000 even though only 1 second was added?
*/

Here is a solution to adding months when you want 2014-10-31 to become 2014-11-30 instead of 2014-12-01.

format ( ‘Y-n-j’ );
list( $y , $m , $d ) = explode ( ‘-‘ , $date );

$last_day = date ( ‘t’ , strtotime ( «$y-$m-1» ));
if ( $d > $last_day )
<
$d = $last_day ;
>

$this -> setDate ( $y , $m , $d );
>

Another simple solution to adding a month but not autocorrecting days to the next month is this.
(Also works for substracting months)

$dt = new DateTime(«2016-01-31»);

$oldDay = $dt->format(«d»);
$dt->add(new DateInterval(«P1M»)); // 2016-03-02
$newDay = $dt->format(«d»);

if($oldDay != $newDay) <
// Check if the day is changed, if so we skipped to the next month.
// Substract days to go back to the last day of previous month.
$dt->sub(new DateInterval(«P» . $newDay . «D»));
>

echo $dt->format(«Y-m-d»); // 2016-02-29

Hope this helps someone.

Be careful when using this function, I may have happened upon a bug in PHP7.

My code is as follows

//get date from post or else fill with today’s date
if (isset($_POST[«from»]))
<
$from = date_create($_POST[«from»]);
>else <
$from = date_create(date(«Y-m-d»));
>

//get date from post if there isn’t one just take the same date as what is in the $from variable and add one day to it
if (isset($_POST[«to»]))
<
$to = date_create($_POST[«to»]);
>else <
$to = $from;
date_modify($to, ‘+1 day’);
>
echo(date_format($from, ‘Y-m-d’) . » » . date_format($to, ‘Y-m-d’));

The resultant output is
$from = 2015-12-11
$to = 2015-12-11

In actuality the result should be
$from = 2015-12-10
$to = 2015-12-11

For some reason the code above modifies the $from variable in the line date_modify($to, ‘+1 day’); even though it shouldn’t as the $from variable isn’t being modified.

to fix this i needed to change the code to

//get date from post or else fill with today’s date
if (isset($_POST[«from»]))
<
$from = date_create($_POST[«from»]);
>else <
$from = date_create(date(«Y-m-d»));
>

//get date from post if there isn’t one just take the same date as what is in the $from variable and add one day to it
if (isset($_POST[«to»]))
<
$to = date_create($_POST[«to»]);
>else <
$to = date_create(date(«Y-m-d»));
date_modify($to, ‘+1 day’);
>
echo(date_format($from, ‘Y-m-d’) . » » . date_format($to, ‘Y-m-d’));

This isn’t strictly the code I wanted. Possible bug?

What you can do with this function/method is a great example of the philosophy: «just because you can do it doesn’t mean you should». I’m talking about two issues: (1) the number of days in the month which varies from months 1-12 as well as for month 2 which could be leap year (or not); and then issue (2): what if there is the need to specify a large quantity of an interval such that it needs to be re-characterized into broader-scoped intervals (i.e. 184 seconds ==> 3 minutes-4 seconds). Examples in notes elsewhere in the docs for this function illustrate both issues and their undesired effects so I won’t focus on them further. But how did I decide to handle? I’ve gone with four «public» functions and a single «private» function, and without giving you a bunch of code to study, here are their summaries.

3. function addTime(int $days, int $hours, int $minutes, int $seconds) <
// I use date_add and create a DateInterval object from the corresponding string spec (created from the args passed to this function). Note that months and years are excluded due to the bad side-effects already mentioned elsewhere.

4. function subtractTime(int $days, int $hours, int $minutes, int $seconds) <
//notes for «addTime» also apply to this function but note that I like separate add and subtract functions because setting the DateInterval property flag to indicate add/subtract is not as intuitive for future coding.

**Results/goals.
—any number of days/hours/minutes/seconds can be passed in to add/subtractTime and all of «Y/M/D/H/M/S» values get adjusted as you would expect.
—using adjustYear/Month lets you pass +/- values and only «Y/M» values get modified without having undesirable effects on day values.
—a call to the «recharacterize» function helps ensure proper and desired values are in the intervals prior to calling date_add to let it do its work.

If you use fraction of seconds, you may have surprises. It only occurs when the sum of the floating point parts results in exactly 1 second (0.5 + 0.5 ou 0.3 + 0.7, for example). See these cases at intervals slightly bigger than 1 second:

f = 0.600 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora is correct: «2017-12-31T23:59:59.900»

f = 0.800 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

Читать еще:  Matlab построение графиков по точкам

$strDataHora is correct: «2018-01-01T00:00:00.100»

f = 0.700 ;
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora has «2017-12-31T23:59:59.1000»

To resolve, add 1 second to the interval and f property must be negative (-1.0 plus original value):

f = — 0.300 ; // = -1.0 + 0.700
$objDataHora = date_add ( $objDataHora , $objIntervalo );
$strDataHora = date_format ( $objDataHora , «Y-m-dTH:i:s.v» );
?>

$strDataHora is correct: «2018-01-01T00:00:00.000»

Работа с датой и временем в MySQL

В этой статье мы рассмотрим основы работы с датой и временем в MySQL.

Формат даты и времени

MySQL date format поддерживает несколько форматов даты и времени. Их можно определить следующим образом:

DATE — хранит значение даты в виде ГГГГ-ММ-ДД. Например, 2008-10-23.
DATETIME — хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2008-10-23 10:37:22. Поддерживаемый диапазон дат и времени: 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP — похож на DATETIME с некоторыми различиями в зависимости от версии MySQL и режима, в котором работает сервер.

Создание полей даты и времени

Таблица, содержащая типы данных DATE и DATETIME , создается так же, как и другие столбцы. Например, мы можем создать новую таблицу под названием orders, которая содержит столбцы номера заказа, заказанного товара, даты заказа и даты доставки заказа:

Столбец ORDER_DATE — это поле типа MySQL DATE TIME , в которое мы записываем дату и время, когда был сделан заказ. Для даты доставки невозможно предсказать точное время, поэтому мы записываем только дату.

Форматы даты и времени

Наиболее часто используемым разделителем для дат является тире ( — ), а для времени — двоеточие ( : ). Но мы можем использовать любой символ, или вообще не добавлять никакого символа.

Например, все следующие форматы являются правильными:

Функции даты и времени

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

Вы можете поэкспериментировать с этими функциями MySQL date format , даже не занося никаких данных в таблицу. Например:

Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):
mysql> SELECT MONTHNAME(NOW());

Внесение значений даты и времени в столбцы таблицы

Рассмотрим, как вносятся значения date MySQL в таблицу. Чтобы продемонстрировать это, мы продолжим использовать таблицу orders , которую создали в начале статьи.

Мы начнем с добавления новой строки заказа. Значение поля order_no будет автоматически увеличиваться на 1, так что нам остается вставить значения order_item , дату создания заказа и дату доставки. Дата заказа — это время, в которое вставляется заказ, поэтому мы можем использовать функцию NOW() , чтобы внести в строку текущую дату и время.

Дата доставки — это период времени после даты заказа, которую мы можем вернуть, используя функцию MySQL DATE_ADD() , которая принимает в качестве аргументов дату начала ( в нашем случае NOW () ) и INTERVAL ( в нашем случае 14 дней ). Например:

Данный запрос создает заказ для указанного элемента с датой, временем выполнения заказа, и интервалом через две недели после этого в качестве даты доставки:

Точно так же можно заказать товар с датой доставки через два месяца:

Извлечение данных по дате и времени

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

Точно так же мы можем использовать BETWEEN , чтобы выбрать товары, доставка которых произойдет между двумя указанными датами. Например:

Заключение

В этой статье мы рассмотрели форматы, используемые для определения даты и времени, и перечислили функции, используемые в для операций в MySQL с тип DATE . А также несколько примеров внесения и извлечения данных.

Данная публикация представляет собой перевод статьи « Working with Dates and Times in MySQL » , подготовленной дружной командой проекта Интернет-технологии.ру

Работа с датами в PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.

Функция time, формат timestamp

Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени. Такое представление даты называется форматом timestamp.

Зачем нужен timestamp?

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

К примеру, у меня есть timestamp за 1-го января текущего года и timestamp за текущий момент времени. Я отниму один от другого и получу разницу между этими моментами в секундах. Поделю эту разницу на 60 и получу разницу в минутах (так как в минуте 60 секунд). Поделю еще на 60 — и получу разницу в часах. И так далее.

С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:

Функция mktime

Функция mktime работает аналогично функции time, но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:

Параметры можно опускать с конца. Если мы не напишем год (последний параметр) — то автоматически возьмется текущий год, если не напишем еще и день (предпоследний параметр) — то возьмется текущий день и текущий год. И так далее:

Решим типичную задачу на time и mktime. Пусть нам нужно найти разницу в секундах между текущим моментом времени и полуднем (12 часов, 0 минут, 0 секунд) 1-го февраля (февраль — это месяц номер 2) 2000 года:

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

Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.

Функция date

Функция date выводит текущие дату и время в заданном формате.

Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).

Команды ( заглавные буквы отличаются от обычных , обратите внимание!):

  • U – количество секунд, прошедших с 1 января 1970 года (то есть timestamp).
  • z – номер дня от начала года.
  • Y – год, 4 цифры.
  • y — год, две цифры.
  • m – номер месяца (с нулем спереди).
  • n – номер месяца без нуля впереди.
  • d – номер дня в месяце, всегда две цифры (то есть первая может быть нулем).
  • j – номер дня в месяце без предваряющего нуля.
  • w – день недели (0 — воскресенье, 1 — понедельник и т.д.).
  • h – часы в 12-часовом формате.
  • H – часы в 24-часовом формате.
  • i – минуты.
  • s – секунды.
  • L – 1, если високосный год, 0, если не високосный.
  • W – порядковый номер недели года.
  • t – количество дней в указанном месяце.

Примеры работы с date:

Второй параметр функции date

Функция date имеет второй необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):

Этим можно воспользоваться, чтобы узнать номер дня недели за определенную дату — просто передадим ее вторым параметром с помощью функции mktime, а первым параметром поставим управляющий символ ‘w’:

Функция strtotime

Следующая полезная функция, которую мы разберем, называется strtotime.

Читать еще:  Php pdo prepare

Функция strtotime — это аналог функции mktime (тоже возвращает timestamp), только в отличие от нее принимает дату в более свободном формате.

К примеру, я могу передать ей строку ‘2025-12-31’ и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.

Что можно делать еще: можно написать так — strtotime(‘now’) — и мы получим текущий момент времени, или так — strtotime(‘next Monday’) — и мы получим следующий понедельник (Monday по-английски ‘понедельник’).

Все форматы можно посмотреть тут.

Следующий код вернет дату предыдущего понедельника:

Как добавить или отнять дату

Чтобы отнять или прибавить к дате определенный промежуток времени, следует пользоваться комбинацией из трех функций: date_create — она подготавливает дату к работе (дата должна быть в формате год-месяц-день) создавая так называемый объект дата, с которым производятся дальнейшие манипуляции, date_modify — она прибавляет или отнимает, date_format — она выводит получившуюся дату в заданном формате. Чтобы вникнуть в работу с этими функциями изучите примеры ниже.

Пример 1

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате ‘день.месяц.год’

Результат выполнения кода:

Пример 2

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате ‘день.месяц.год’

Результат выполнения кода:

Пример 3

Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате ‘день.месяц.год’

Результат выполнения кода:

Пример 4

Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате ‘день.месяц.год’

Результат выполнения кода:

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

Работа с датой и временем в PHP в ООП стиле. Часть 1

Перед web-разработчиками часто возникают задачи, в которых они должны работать с датой и временем. Если вы все еще используете PHP функции, такие как strtotime и date для работы с датой и временем в PHP, то вы многое упускаете.

PHP предоставляет специализированный класс DateTime для работы с датой и временем. Однако, многие игнорируют его использование, несмотря на то, что он доступен в PHP начиная с версии 5.2.

Вот несколько причин, почему предпочтительнее использовать класс DateTime вместо strtotime и date:

  1. Класс DateTime может работать с большим числом форматов даты и времени по сравнению с strtotime.
  2. Работать с объектами легче, чем с функциями. Даты, являющиеся объектами класса DateTime можно сравнивать напрямую, как обычные числа. Тогда как для сравнения двух дат с помощью функции strtotimе нам необходимо сначала преобразовать их во временные метки и только затем сравнить.
  3. Объектно-ориентированный интерфейс DateTime скрывает много внутренней логики работы с датой и обеспечивает понятный и однозначный интерфейс.

Создание объекта класса DateTime.

Создание объекта класса DateTime ничем не отличается от создания экземпляра какого-либо другого класса в PHP.

Если в конструктор класса DateTime не передавать параметр, то будет создан объект с текущей временной меткой и временной зоной по умолчанию. Временная зона в PHP, как правило, настраивается в файле php.ini. Вот так создается объект DateTime с текущим временем.

$now = new DateTime();

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

Несколько примеров создания объекта DateTime с передачей в конструктор строки, содержащей время.

$yesterday = new DateTime(‘yesterday’); // вчера
$twoDaysLater = new DateTime(‘+ 2 days’); // на 2 дня вперед
$oneWeekEarly = new DateTime(‘- 1 week’); // минус одна неделя

Второй параметр конструктора класса DateTime позволяет определить временную зону. Этот параметр имеет тип DateTimeZone.

Например, чтобы создать объект класса DateTime с временной зоной Москвы надо сделать следующее:

$yesterdayInMoscow = new DateTime(‘yesterday’, new DateTimeZone(‘Moscow’));

Конечно, мы также можем создать объект DateTime как обычно, с помощью строки.

$dateTime = new DateTime(‘2015-01-01 12:30:12’);

Формат

В зависимости от системы, которую мы собираемся проектировать, нам могут понадобится различные форматы даты и времени. Форматирование объекта DateTime в формат необходимый в конкретном проекте достаточно просто делается через метод DateTime::format().

Метод DateTime::format() принимает в качестве параметра строку. Эта строка может включать плейсхолдеры, перечисленные на странице официальной документации PHP.

Например, чтобы получить подобный формат YYYY-dd-mm, где Y – год, d – день, m – месяц необходимо сделать следующее:

$now = new DateTime();
$now = $now->format(‘Y-m-d’);

Мы можем создать любой желаемый формат даты. Вот несколько дополнительных опций:

print_r($now->format(‘jS F Y’));
print_r($now->format(‘ga jS M Y’));
print_r($now->format(‘Y/m/d s:i:H’));

Сравнение дат и времени

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

В отличие же, от данной функции, объект DateTime предоставляет возможность сравнивать два объекта DateTime как два обычных числа. Вот несколько примеров:

$today = new DateTime(‘today’);
$yesterday = new DateTime(‘yesterday’);

var_dump($today > $yesterday); // bool(true)
var_dump($today

Но бывают случаи, когда логическое значение от сравнения двух дат недостаточно. Например, нам нужно знать, точную разницу между двумя датами. И DateTime::diff() является тем методом, который поможет нам узнать разницу между двумя объектами DateTime. Этот метод возвращает объект класса DateInterval, который может быть использован для получения интервала, в любом требуемом нами формате посредством метода DateInterval::format.

Например, для получения количества дней между сегодняшней датой и вчерашней датой, мы можем сделать следующее:

$interval = $today->diff($yesterday);
echo $interval->format(‘%d день назад’) // 1 день назад

Со всем разнообразием свойств класса DateInterval вы можете ознакомиться на официальном сайте PHP.

На этом все, и в следующей статье мы продолжим изучать классы для работы с датой и временем в PHP.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 3 ):

    Всем привет извините что пишу здесь но е могли бы подсказать хотел бы узнать как сделать так что бы ретрансляцию для моего сайта хочу чтобы например телеканал тнт транслировалась прямо с моего сайта а не сервера тнт.. Вот этот сайт введет трансляцию мачт тв с своего сервера http://fifa.beta.tj/schedule

    Уточните, пожалуйста, вы хотите чтобы, когда пользователь заходил к Вам на сайт, то он мог бы смотреть передачу на вашем сайте?

    ну вот например есть код видео трансляции (ТНТ) для вставки для других сайтов . и когда я вставлю этот код у посетителей расходуется трафик из сервера тнт, Я хочу чтобы расходовалось из моего сервера

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Ссылка на основную публикацию
    Adblock
    detector