datetime from unixtime php

The DateTime class

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

Introduction

This class behaves the same as DateTimeImmutable except objects are modified itself when modification methods such as DateTime::modify() are called.

Class synopsis

Changelog

Table of Contents

User Contributed Notes 26 notes

Set Timezone and formatting.

= time ();
$timeZone = new \ DateTimeZone ( ‘Asia/Tokyo’ );

DateTime supports microseconds since 5.2.2. This is mentioned in the documentation for the date function, but bears repeating here. You can create a DateTime with fractional seconds and retrieve that value using the ‘u’ format string.

// Instantiate a DateTime with microseconds.
$d = new DateTime ( ‘2011-01-01T15:03:01.012345Z’ );

There is a subtle difference between the following two statments which causes JavaScript’s Date object on iPhones to fail.

/**
On my local machine this results in:

Both of these strings are valid ISO8601 datetime strings, but the latter is not accepted by the constructor of JavaScript’s date object on iPhone. (Possibly other browsers as well)
*/

?>

Our solution was to create the following constant on our DateHelper object.

class DateHelper
<
/**
* An ISO8601 format string for PHP’s date functions that’s compatible with JavaScript’s Date’s constructor method
* Example: 2013-04-12T16:40:00-04:00
*
* PHP’s ISO8601 constant doesn’t add the colon to the timezone offset which is required for iPhone
**/
const ISO8601 = ‘Y-m-d\TH:i:sP’ ;
>
?>

Small but powerful extension to DateTime

class Blar_DateTime extends DateTime <

= new Blar_DateTime ( ‘1879-03-14’ );

Albert Einstein would now be 130 years old.

Albert Einstein would now be 130 Years, 10 Months, 10 Days old.

Albert Einstein was on 2010-10-10 131 years old.

Example displaying each time format:

$dateTime = new DateTime();

The above example will output:

At PHP 7.1 the DateTime constructor incorporates microseconds when constructed from the current time. Make your comparisons carefully, since two DateTime objects constructed one after another are now more likely to have different values.

This caused some confusion with a blog I was working on and just wanted to make other people aware of this. If you use createFromFormat to turn a date into a timestamp it will include the current time. For example:

if you’d like to print all the built-in formats,

This might be unexpected behavior:

#or use the interval
#$date1->add(new DateInterval(«P1M»));

#will produce 2017-10-1
#not 2017-09-30

A good way I did to work with millisecond is transforming the time in milliseconds.

function timeToMilliseconds($time) <
$dateTime = new DateTime($time);

If you have timezone information in the time string you construct the DateTime object with, you cannot add an extra timezone in the constructor. It will ignore the timezone information in the time string:

$date = new DateTime(«2010-07-05T06:00:00Z», new DateTimeZone(«Europe/Amsterdam»));

will create a DateTime object set to «2010-07-05 06:00:00+0200» (+2 being the TZ offset for Europe/Amsterdam)

To get this done, you will need to set the timezone separately:

$date = new DateTime(«2010-07-05T06:00:00Z»);
$date->setTimeZone(new DateTimeZone(«Europe/Amsterdam»);

This will create a DateTime object set to «2010-07-05 08:00:00+0200»

It isn’t obvious from the above, but you can insert a letter of the alphabet directly into the date string by escaping it with a backslash in the format string. Note that if you are using «double» speech marks around the format string, you will have to further escape each backslash with another backslash! If you are using ‘single’ speech marks around the format string, then you only need one backslash.

For instance, to create a string like «Y2014M01D29T1633», you *could* use string concatenation like so:

please note that using

setTimezone
setTimestamp
setDate
setTime
etc..

$original = new DateTime(«now»);

so a datetime object is mutable

(Editors note: PHP 5.5 adds DateTimeImmutable which does not modify the original object, instead creating a new instance.)

Читайте также:  малина летом сильно загустилась что делать

Create function to convert GregorianDate to JulianDayCount

Note that the ISO8601 constant will not correctly parse all possible ISO8601 compliant formats, as it does not support fractional seconds. If you need to be strictly compliant to that standard you will have to write your own format.

Bug report #51950 has unfortunately be closed as «not a bug» even though it’s a clear violation of the ISO8601 standard.

It seems like, due to changes in the DateTimeZone class in PHP 5.5, when creating a date and specifying the timezone as a a string like ‘EDT’, then getting the timezone from the date object and trying to use that to set the timezone on a date object you will have problems but never know it. Take the following code:

Be aware that DateTime may ignore fractional seconds for some formats, but not when using the ISO 8601 time format, as documented by this bug:

$dateTime = DateTime::createFromFormat(
DateTime::ISO8601,
‘2009-04-16T12:07:23.596Z’
);
// bool(false)

Be aware of this behaviour:

In my opinion, the former date should be adjusted to 2014/11/30, that is, the last day in the previous month.

Here is easiest way to find the days difference between two dates:

If you’re stuck on a PHP 5.1 system (unfortunately one of my clients is on a rather horrible webhost who claims they cannot upgrade php) you can use this as a quick workaround:

If you need DateTime::createFromFormat functionality in versions class DateClass extends DateTime <

$regexpArray [ ‘Y’ ] = «(?P 19|20\d\d)» ;
$regexpArray [ ‘m’ ] = «(?P 05|1[012])» ;
$regexpArray [ ‘d’ ] = «(?P 04|[12]8|3[01])» ;
$regexpArray [ ‘-‘ ] = «[-]» ;
$regexpArray [ ‘.’ ] = «[\. /.]» ;
$regexpArray [ ‘:’ ] = «[:]» ;
$regexpArray [ ‘space’ ] = «[\s]» ;
$regexpArray [ ‘H’ ] = «(?P 03|19|22)» ;
$regexpArray [ ‘i’ ] = «(?P54)» ;
$regexpArray [ ‘s’ ] = «(?P39)» ;

Источник

PHP: проблема с timestamp в DateTime

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

Объект класса DateTime в PHP можно создать как стандартным методом:

$date = new DateTime ( «2009-01-21» );

так и функцией date_create, входящей в состав PHP начиная с версии 5.2.0:

$date = date_create ( «2009-01-21» );

Конструктор принимает как параметр строку, которая определяет дату и время, также это могут быть названия дней недели и куча других параметров, которые описаны в документации к функции strtotime. Еще есть возможность передавать в конструктор метку времени (timestamp), поместив ее после символа «@», к примеру, так:

$date = new DateTime ( «@1232488800» );

Именно с этим параметром и возникли некоторые непонятки.
Для вывода информации о конкретном объекте даты создадим следующую функцию:

Создаем объекты даты и выводим информацию о нем

Timestamp: 1232488800 — 21/01/2009 00:00:00
Timezone: Europe/Helsinki (Offset: 7200 sec.)

хорошо, у нас есть метка, дата и временная зона.
Создадим другой объект, передадим ему в параметр название недели того же дня — «Wednesday».

Timestamp: 1232488800 — 21/01/2009 00:00:00
Timezone: Europe/Helsinki (Offset: 7200 sec.)

Замечательно. Теперь у нас есть 2 одинаковые метки времени и совпадающие даты.

Теперь внимание, создаем объект с параметром временной метки и выводим информацию о нем

Timestamp: 1232488800 — 20/01/2009 22:00:00
Timezone: Europe/Helsinki (Offset: 7200 sec.)

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

Я с недоумением смотрел на результат и не мог понять, как это возможно. Заново пересмотрел документацию — вроде все правильно сделал.

Читайте также:  Что такое экс чемпион

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

Timestamp: 1232488800 — 21/01/2009 00:00:00
Timezone: Europe/Helsinki (Offset: 7200 sec.)

Делал все эти телодвижения я в Виндовсе, стал уже грешить на нее, но попробовав в Линкусе, и получив тот же результат, кошусь в сторону разработчиков языка. Версия PHP в обеих ОСях 5.2.4, так что, возможно, в более новых версиях уже исправлено. Но кто предупрежден — тот вооружен.

Источник

Получение даты и времени в PHP. Функция date

Вместо предисловия

Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров: — элементарное добавление даты в запись БД; — отображение времени; — вывод дат в различном формате; — проверка текущего времени на соответствие заданному таймеру; — определение срока между 2-мя датами и так далее.

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

В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.

Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:

На момент написания материала было 14 октября 2020 года, поэтому в терминале отобразилось следующее:

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

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

Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.

Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.

Функция date

Эта функция возвратит пользователю строку в форме даты/времени, сделав это в определённом формате. Формат этот определяет сам пользователь.

Синтаксис функции выглядит так:

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

Теперь давайте попробуем, как эта таблица работает на практике. Выведем текущий день недели:

У меня получился Wednesday, а вот что отобразится в консоли у вас, зависит от дня недели, в который вы напишете эту команду.

Читайте также:  поздравить с крещением ребенка девочки стихи

Теперь выведем дату в виде YYYY-ММ-DD:

А потом и дату, и время:

Описание time и mktime

Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.

Для начала займёмся её использованием вместе с меткой текущей даты:

Теперь стоит поговорить о том, каким образом с функцией time используется mktime. Именно mktime возвращает метки времени Unix для даты, которую укажет пользователь.

Аргументы могут быть разные, а также опущены справа налево:

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

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

Источник

PHP: Convert a date into a Unix timestamp.

This is a short PHP guide on how to convert a regular date string into a Unix timestamp. As you probably already know, “Unix Time” is the number of seconds that have passed since the 1st of January, 1970.

For the sake of this example, let’s say that we want to convert 2019-04-01 10:32:00 into an Epoch timestamp.

strtotime

To do this in PHP, we can use the strtotime function like so:

If you run the example above, you will see that 1554107520 is printed out onto the page. This is because 1554107520 passed between the Epoch time and 10:32AM on the 1st of April, 2019.

Note that the strtotime function will return a boolean FALSE value if the conversion fails.

Using the DateTime object.

If you prefer using OOP and the DateTime object, then you can do the following:

As you can see, it’s pretty similar to the strtotime approach. In the case above, we simply converted the date by passing the “U” format character into the DateTime “format” method.

Note that if you leave out the exact time, PHP will default to midnight:

The above example will output “1554069600”, which is the Unix timestamp for midnight on the 1st of April, 2019.

By the way, in order to get the current timestamp, you can simply call PHP’s time function like so:

That’s it! Hopefully, you found this guide useful!

Источник

Функция MySQL FROM_UNIXTIME ()

FROM_UNIXTIME () функция

MySQL FROM_UNIXTIME () возвращает дату / дату / время из версии unix_timestamp. Возвращаемое значение имеет формат «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или формат ГГГГММДДЧЧММСС.уууууу, в зависимости от контекста функции (числовой или строковый). Если указано, результат форматируется в соответствии с заданной строкой формата.

Синтаксис:

аргументы

название Описание
UNIX_TIMESTAMP Метка времени UNIX
формат Строка формата, указывающая формат возвращаемого значения.

Синтаксическая диаграмма:

Версия MySQL: 5.6

Видео презентация

Ваш браузер не поддерживает видео HTML5.

Иллюстрированная презентация

Пример: функция MySQL FROM_UNIXTIME ()

Следующий оператор вернет значение даты и времени от 1255033470.

PHP скрипт

JSP скрипт

Пример: функция FROM_UNIXTIME () в числовом формате

Следующий оператор вернет значение datetime в числовом формате от 1255033470.

PHP скрипт

Пример: функция FROM_UNIXTIME () со сперификатором формата

Следующая инструкция вернет значение даты и времени из 1255033470. Дата и время форматируются в соответствии со строкой форматирования% Y% D% M% h:% i:% s% x.

PHP скрипт

Все функции даты и времени:

Нажмите здесь, чтобы увидеть функции даты и времени MySQL.

Предыдущая: FROM_DAYS ()
Далее: GET_FORMAT ()

Источник

Образовательный портал