Progress28.ru

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

New datetime php

New datetime php

В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.

PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:

  • time( ) — возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX).
  • getdate( ) — считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:

seconds

Секунды (0-59)
minutes

Минуты (0-59)
hours

Часы (0-23)
mday

День месяца (1-31)
wday

День недели (0-6), начиная с воскресенья
mon

Месяц (1-12)
year

Год
yday

День года (0-365)
weekday

Название дня недели (например, Friday)
month

Название месяца (например, January)
0

Абсолютное время

Пример 1

a

Включено обозначение «am» или «pm»
A

Включено обозначение «AM» или «PM»
d

День месяца (01-31)
D

Сокращенное название дня недели (три буквы)
F

Полное название месяца
g

Часы (12-часовой формат без ведущих нулей)
G

Часы (24-часовой формат без ведущих нулей)
h

Часы (12-часовой формат)
H

Часы (24-часовой формат)
i

Минуты (00-59)
j

День месяца без ведущих нулей (1-31)
l

Полное название дня недели
L

Признак високосного года (0 или 1)
m

Месяц (01-12)
M

Сокращенное название месяца (три буквы)
n

Месяц (1-12)
s

Секунды (00-59)
t

Количество дней в данном месяце (от 28 до 31)
U

Абсолютное время
w

Номер дня недели (0 — воскресенье, 6 — суббота)
y

Год (два разряда)
Y

Год (четыре разряда)
z

День года (0-365)
Z

Смещение часового пояса в секундах (от -43200 до 43200)

Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту «». Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку «n», то надо ввести «\n», поскольку «n» является символом новой строки.

Пример 2

mktime( ) — возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate(). Принимает до шести целочисленных аргументов в следующем порядке:

часы
минуты
секунды
месяц
день месяца
год

Пример 3

Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.

strftime( ) — формирование локальной даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции setlocate( ) Строка формата может содержать следующие коды:

%a

Сокращенное название дня недели
%A

Полное название дня недели
%b

Сокращенное название месяца
%B

Полное название месяца
%c

Предпочтительный формат даты и времени
%C

Номер века
%d

День месяца (1-31)
%D

То же, что и %m/%d/%y
%e

Месяц (1-12)
%h

То же, что и %b
%H

Часы (24-часовой формат)
%I

Часы (12-часовой формат)
%j

День года (0-365)
%m

Месяц (1-12)
%M

Минуты
%n

Символ новой строки
%p

Включено обозначение «am» или «pm»
%r

Время с использованием a.m./p.m.-нотации
%R

Время в 24-часовом формате
%S

Секунды (00-59)
%t

Символ табуляции
%T

То же, что и %H:%M:%S
%u

Номер дня недели (1 — понедельник, 7 — воскресенье)
%U

Номер недели. Отсчет начинается с первого воскресенья года
%V

Номер недели по ISO 8601:1988. Первая неделя должна иметь не менее четырех дней, а понедельник считается первым днем
%W

Номер недели. Отсчет начинается с первого понедельника года
%w

Номер дня недели (0 — воскресенье, 6 — суббота)
%x

Предпочтительный формат даты без времени
%X

Предпочтительный формат времени без даты
%y

Год (два разряда)
%Y

Год (четыре разряда)
%Z

Часовой пояс (имя или сокращение)
%%

Символ «%»

Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.

NOW() function in PHP

Is there a PHP function that returns the date and time in the same format as the MySQL function NOW() ?

I know how to do it using date() , but I am asking if there is a function only for this.

For example, to return:

16 Answers 16

Not besides the date function:

800 upvotes more. Your answer submission was probably seconds apart from his. 🙂 Thank You for writing it anyways 😀 – Aleksandar May 29 ’19 at 8:50

With PHP version >= 5.4 DateTime can do this:-

Use this function:

Short answer

Read below for the long answer.

The mimicry of the MySQL NOW() function in PHP

Here is a list of ways in PHP that mimic the MySQL NOW() function.

I think that date_create()->format(‘Y-m-d H:i:s’) is the best way because this approach allows you to handle time/time-zone manipulations easier than date(‘Y-m-d H:i:s’) and it works since php 5.2.

MySQL NOW() function

The MySQL function NOW() gives the dateTime value in this format: ‘YYYY-MM-DD HH:MM:SS’ . See here: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now.

An interesting fact is that it’s possible to get the datetime format by running this query: SHOW VARIABLES LIKE ‘d%e_format’ , the result could be something like this:

The variables up here are read-only variables. So you can’t change it.

I guess the MySQL NOW() function gets it’s format from the datetime_format variable.

The advantages of date_create()->format() instead date() summary

The favorable facts of date_create(‘now’)->format(‘Y-m-d H:i:s’) over date(‘Y-m-d H:i:s’) are:

  • easier to handle time manipulations
  • easier to handle timezones
  • o.o.p.

The disadvantages of date_create()->format() instead date()

The function date() has a slightly better performance than date_create()->format() . See benchmark test below.

The upper case shows that date() is faster. However, if we change the test scenario a bit, then outcome will be different. See below:

The DateTime method: format() is faster here than date() .

The advantages of date_create()->format() instead date() detailed

Read on for the detailed explanation.

easier to handle time manipulations

date_create() accepts a relative date/time format (like now , yesterday or +1 day ) see this link, example:

date() accepts a relative date/time format as well, like this:

easier to handle timezones

When timezones matter then the usage of date_create()->format() makes a lot more sense then date() because date() uses the default time zone which is configured in php.ini at the date.timezone directive. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .

It is possible to change the timezone during run-time. Example:

The downside of that is that it will affect all date/time functions. This problem doesn’t exists if you are using date_create()->format() in combination with timezone_open() .

PHP supports major timezones. The funny thing is that it even supports the Arctic circle, and Antarctica. Have you ever heard about Longyearbyen ? If not, then don’t worry, neither did I until I read the official PHP documentation.

o.o.p.

O.O.P. uses state-full Objects. So I prefer to think in this way:

Then to think in this way:

Therefore I would say that the date_create()->format() approach is more readable to me then date() .

date_create() VS new DateTime()

The favorable facts of date_create() over new DateTime() are:

Namespaces

If you work in a namespace and want to initialise a DateTime object with the new keyword, then you have to do it like this:

There is nothing wrong with this, but the downside of the above is that people forget sporadically about the backslash. By using the date_create() constructor function you don’t have to worry about namespaces.

Example of date_create()->format()

I use this approach for my projects if I have to fill an array. Like this:

Работа с датой и временем в 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 Русаков Михаил Юрьевич. Все права защищены.

    Дата и время – метод OOP

    Расширение PHP Date/Time представляет собой набор классов, которые позволяют решать практически все задачи, связанные с датой и временем.

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

    • Дата или время представляются объектом DateTime;
    • Часовой пояс представляется объектом DateTimeZone;
    • Объекты DateInterval представляют временной интервал. Например, когда мы говорим, что с этого момента прошло два дня, то в этом случае « два дня » как раз является временным интервалом. Объект DateInterval не указывает на конкретную дату или время;
    • Объекты DatePeriod задают период между двумя конкретными датами.

    А теперь не позволите ли мне дать два вам два небольших совета: оба, я уверен, помогут вам в решении практических задач.

    От date() к DateTime

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

    Функция DateTime дает нам намного больше, чем просто возможность выводить в нужном формате дату и время. Однако прежде, чем мы пойдем дальше, вам нужно будет создать новый объект DateTime , который представляет дату и / или время.

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

    Конструктор по умолчанию принимает для него значение « сейчас » — текущие время и дата. Чтобы создать объект для определенной даты, вы должны присвоить ему значение этих даты и времени.

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

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

    Если в ней отсутствует нужный вам формат, вы всегда можете задать свой собственный с помощью функции DateTime :: createFromFormat :

    Теперь, когда у нас есть объект DateTime , мы довольно легко можем сделать с ним кучу интересных вещей.

    Формат времени для Unix:

    Изменение даты/времени:

    Обратите внимание, что, если задается значение, выходящее за границы диапазона, PHP соответственно модифицирует дату. Например, запись $date->setDate(2013, 12, 35); будет преобразована в дату 2014-01-04. То же самое касается и времени.

    Работа с несколькими датами

    Теперь, когда вы создали объект DateTime , следующее, что я вам расскажу – это как ваши приложения будут задавать для него значения. Вам понравится работать с датой и временем, как никогда раньше. Теперь вы будете иметь дело с объектами DateTime.

    А не строками « строками », которые вы использовали раньше, чтобы задавать значения через функцию StrToTime , когда нужны были некоторые математические вычисления.

    Скажем, вам нужно сравнить два дня рождения:

    Еще один сценарий сравнения двух дат. Мы можем сравнить их вот таким образом:

    Функция diff задает объект DateInterval . Если мы создали для него все соответствующие значения:

    Это публичные свойства. Вы можете создать и собственный привлекательный формат вывода объекта DateInterval :

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

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

    В PHP 5.5 введен новый класс, который задает новые объекты, не поддерживавшиеся предыдущими версиями.
    Функция diff не единственный способ, которым можно генерировать объект DateInterval . Так как это отдельный класс, новые объекты можно инициировать обычным способом:

    Значения года / месяца / дня и т.д., передаются в конструктор в виде строки. Более подробную информацию можно найти в справочной документации .

    Работа с часовыми поясами

    При создании новых объектов DateTime, второй аргумент конструктора предназначен для задания часового пояса. Если мы пропускаем его, тогда часовой пояс присваивается по умолчанию, на основании значения date.timezone файла php.ini. Вы можете изменить его в любое время через функцию date_default_timezone_set :

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

    Также вы можете задать часовой пояс при создании нового объекта DateTime :

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

    Список часовых поясов доступен в онлайн-документации .

    DatePeriods

    Я думаю, что в официальном руководстве дано наиболее подходящее определение:
    « DatePeriods позволяет перечислить множества дат и времен, повторяющихся через определенные интервалы времени в течение заданного периода ».

    DatePeriod позволяет создать набор объектов DateTimes, используя два дня, ограничивающие временной интервал. Основными элементами набора являются: дата начала периода, интервал и дата окончания. Для каждого временного интервала создается новый объект DateTime.

    Предположим, мы хотим получить все дни рождения Шелдона с момента его рождения:

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

    Теперь по умолчанию объект DatePeriod включает дату начала временного интервала. Однако с помощью четвертого аргумента можно пропустить начальную дату:

    Теперь давайте посмотрим, сколько дней рождения успел отпраздновать Нео, до того, как родился Шелдон:

    Расширения

    Все классы, которые мы сегодня рассмотрели, могут быть расширены под использование в сочетании с собственными методами. Одно из самых популярных расширений — это использование объекта DateTime с методом __ ToString , которое позволяет выводить корректно DateTime без обращения к формату.

    Несколько примеров использования

    Лично я в своей практике часто использую объекты DateTime, когда имею дело со столбцами базы данных, в которых записываются значения даты / времени. Все даты хранятся в таблице в виде даты по Гринвичскому времени.

    Код приложения работает только с объектами DateTime, однако пока в ходе обработки запроса не будут сгенерированы даты в соответствующих форматах, все они исчисляются в часовом поясе по Гринвичу. Данный подход позволил мне довольно просто работать с датами, которые принадлежат разным часовым поясам.

    Я могу работать с временным объектом, исчисляемым по Нью-Йоркскому времени, и не заботиться о его формате, когда данные записываются в базу данных. Я могу легко переключаться между форматом Unix и регулярным форматом даты-времени в любой момент, мои приложения обрабатывают только объекты DateTime.

    Я также использовал объект DateInterval , чтобы упростить логику скрипта, обрабатывающего поступающие платежи за подписку. Использовав объекты DateInterval для определения интервалов между двумя регулярными платежами, я сделал его намного проще.

    Мне всего лишь нужно применить заданный интервал к дате последней оплаты.
    У вас есть свои собственные примеры работы с датой / временем? Поделитесь ими в комментариях.

    На будущее

    Расширение DateTime может иметь столь большое количество применений. Если вы следите за последними событиями в этой области, то знаете, что появились новые классы и интерфейсы, принятые уже после PHP 5.5 .

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

    Данная публикация представляет собой перевод статьи « Dates and Time – The OOP Way » , подготовленной дружной командой проекта Интернет-технологии.ру

    Читать еще:  Виды психологических защит в психологии
    Ссылка на основную публикацию
    Adblock
    detector