php datetime utc format
Php datetime utc format
Начиная с версии 5.2 в PHP появился такой тип данных как DateTime. Попробуем в этой статье разобраться почему лучше использовать его вместо старых функций date() и time().
Функция time() возвращает текущее время в unix формате (timestamp).
Datetime()
Объект Datetime впервые был представлен в PHP версии 5.2, он содержит в себе множество вспомогательных объектов, для решения проблем, с которыми вам приходилось сталкиваться при использовании функций date() и time(). Также был представлен объект DateTimeZone, который управляет часовым поясом, объект DateInterval соответствует интервалу времени (например 2 дня) от настоящего момента, DatePeriod показывает разницу во времени между двумя разными датами. Основное преимущество использования DateTime перед старыми функциями заключается в том, что значения дат проще изменять. Если вы хотите получить значение времени и даты при помощи функции date(), то вы напишите следующее:
А вот пример для установки часового пояса:
Проблема возникает при необходимости изменить или сравнить две отметки времени, DateTime имеет методы modify() и diff() упрощающие задачу. Преимущества DateTime проявляются когда вы манипулируете значениями дат.
Сначала объект надо инициализировать
Вывод форматированной даты
Объект DateTime может работать также как и функция date, всего лишь необходимо вызвать метод format() указав формат возвращаемой строки.
Вывод отметки времени (timestamp)
Изменение времени
Изменение метки timestamp
Установка часового пояса
Полный список часовых поясов можно просмотреть на php.net.
Как добавить дни к значению даты
Для изменения значения даты в объекте DateTime можно использовать метод modify(). Он принимает в качестве параметра строковое значение дней, месяцев, года. Например, если хотите прибавить несколько дней, например 3 дня, один месяц и один год:
Сравнение двух дат
Код выше даст нам разницу двух дат в виде DateInterval.
Конвертация номера месяца и имени месяца
Довольно часто приходится получать имя месяца из его порядкового номера, для этого всего лишь нужно указать формат “F” в качестве первого параметра
Получаем количество недель в месяце
Следующий пример поможет вам получить количество недель в определенном месяце года.
php конвертировать datetime в UTC
Мне нужен простой способ конвертировать отметку времени даты в UTC (из любого часового пояса, в котором находится сервер), надеюсь, без использования каких-либо библиотек.
14 ответов:
(но это использует класс)
без каких-либо классов вы можете попробовать что-то вроде этого:
Примечание: возможно, вам придется установить часовой пояс обратно в оригинал, а также
использовать strtotime чтобы создать метку времени из данной строки (интерпретируется как местное время) и использовать gmdate чтобы получить его в виде форматированной даты UTC назад.
пример
Как и просили, вот простой пример:
чтобы получить «сейчас» в UTC.
Если у вас есть дата в формате гггг-ММ-ДД чч:мм:СС, вы можете фактически обмануть php, добавив UTC в конце вашей «строки datetime» и использовать strtotime для ее преобразования.
это будет печатать этот:
и, как вы можете видеть, он также заботится о проблеме летнего времени.
немного странный способ решить эту проблему. 🙂
Как strtotime требуется определенный формат ввода,DateTime:: createFromFormat можно использовать (php 5.3+ требуется)
Я иногда использую этот метод:
работает всебольшинство времени.
преобразование строки местного часового пояса в строку UTC.
например, часовой пояс Новой Зеландии
в PHP конвертировать datetime в UTC
Мне нужен простой способ конвертировать отметку времени даты в UTC (из любого часового пояса, в котором находится сервер), надеюсь, без использования библиотек.
14 ответов
(но это использует класс)
без каких-либо классов вы можете попробовать что-то вроде этого:
Примечание: возможно, Вам также потребуется установить часовой пояс обратно в исходный
использовать strtotime для создания метки времени из данной строки (интерпретируется как местное время) и использовать gmdate чтобы получить его в виде форматированной даты UTC.
пример
по запросу, вот простой пример:
чтобы получить «сейчас» в UTC.
Если у вас есть дата в формате гггг-ММ-ДД чч:мм:СС, вы можете обмануть php, добавив UTC в конце вашей «строки datetime» и использовать strtotime для ее преобразования.
это напечатает это:
и, как вы можете видеть, он также заботится о проблеме летнего времени.
немного странный способ ее решения. 🙂
As strtotime требуется определенный формат ввода,DateTime:: createFromFormat может использоваться (php 5.3+ требуется)
Я иногда использую этот метод:
работает все большинство времени.
преобразовать строку локального часового пояса в строку UTC.
например, часовой пояс Новой Зеландии
С PHP 5 или выше, вы можете использовать datetime:: format функция (см. документацию http://us.php.net/manual/en/datetime.format.php)
вы должны изменить время форматирования, чтобы увидеть другой выход
функция нормализации общего назначения для форматирования любой метки времени из любого часового пояса в другой. Очень полезно для хранения datetimestamps пользователей из разных часовых поясов в реляционной базе данных. Для сравнения баз данных храните метку времени как UTC и используйте с gmdate(‘Y-m-d H:i:s’)
использование:
на Pafford у Фила (Я не понял его «Y-d-mTG:i: sz», и он предложил вернуть часовой пояс). Поэтому я предлагаю это (я усложнил, изменив формат HMTL в plain / text. ):
в качестве альтернативы вы можете попробовать это:
вы можете использовать это внутри атрибута value текстового поля ввода, если вы хотите отобразить только дату только для чтения.
удалите «e», если вы не хотите показывать свой регион/страну.
Php datetime utc format
(PHP 4, PHP 5, PHP 7, PHP 8)
date — Форматирует вывод системной даты/времени
Описание
Список параметров
Возвращаемые значения
Ошибки
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( ‘UTC’ );
// выведет примерно следующее: Monday
echo date ( «l» );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS \of F Y h:i:s A’ );
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Пример #3 Пример совместного использования функций date() и mktime()
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘\i\t \i\s \t\h\e jS \d\a\y.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s \m \i\s\ \m\o\n\t\h’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Примечания
Смотрите также
User Contributed Notes 20 notes
Things to be aware of when using week numbers with years.
Conclusion:
if using ‘W’ for the week number use ‘o’ for the year.
In order to define leap year you must considre not only that year can be divide by 4!
The correct alghoritm is:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
So the code should look like this:
For Microseconds, we can get by following:
echo date(‘Ymd His’.substr((string)microtime(), 1, 8).’ e’);
FYI: there’s a list of constants with predefined formats on the DateTime object, for example instead of outputting ISO 8601 dates with:
echo date ( ‘Y-m-d\TH:i:sO’ );
?>
You can use
echo date ( DateTime :: ISO8601 );
?>
instead, which is much easier to read.
this how you make an HTML5 tag correctly
It’s common for us to overthink the complexity of date/time calculations and underthink the power and flexibility of PHP’s built-in functions. Consider http://php.net/manual/en/function.date.php#108613
date() will format a time-zone agnostic timestamp according to the default timezone set with date_default_timezone_set(. ). Local time. If you want to output as UTC time use:
$tz = date_default_timezone_get ();
date_default_timezone_set ( ‘UTC’ );
For HTML5 datetime-local HTML input controls (http://www.w3.org/TR/html-markup/input.datetime-local.html) use format example: 1996-12-19T16:39:57
To generate this, escape the ‘T’, as shown below:
If timestamp is a string, date converts it to an integer in a possibly unexpected way:
The example below formats today’s date in three different ways:
The following function will return the date (on the Gregorian calendar) for Orthodox Easter (Pascha). Note that incorrect results will be returned for years less than 1601 or greater than 2399. This is because the Julian calendar (from which the Easter date is calculated) deviates from the Gregorian by one day for each century-year that is NOT a leap-year, i.e. the century is divisible by 4 but not by 10. (In the old Julian reckoning, EVERY 4th year was a leap-year.)
This algorithm was first proposed by the mathematician/physicist Gauss. Its complexity derives from the fact that the calculation is based on a combination of solar and lunar calendars.
At least in PHP 5.5.38 date(‘j.n.Y’, 2222222222) gives a result of 2.6.2040.
So date is not longer limited to the minimum and maximum values for a 32-bit signed integer as timestamp.
Prior to PHP 5.6.23, Relative Formats for the start of the week aligned with PHP’s (0=Sunday,6=Saturday). Since 5.6.23, Relative Formats for the start of the week align with ISO-8601 (1=Monday,7=Sunday). (http://php.net/manual/en/datetime.formats.relative.php)
This can produce different, and seemingly incorrect, results depending on your PHP version and your choice of ‘w’ or ‘N’ for the Numeric representation of the day of the week:
Prior to PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 10 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 10 Oct 2016
Since PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 03 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 03 Oct 2016
I’ve tested it pretty strenuously but date arithmetic is complicated and there’s always the possibility I missed something, so please feel free to check my math.
The function could certainly be made much more powerful, to allow you to set different days to be ignored (e.g. «skip all Fridays and Saturdays but include Sundays») or to set up dates that should always be skipped (e.g. «skip July 4th in any year, skip the first Monday in September in any year»). But that’s a project for another time.
$start = strtotime ( «1 January 2010» );
$end = strtotime ( «13 December 2010» );
// Add as many holidays as desired.
$holidays = array();
$holidays [] = «4 July 2010» ; // Falls on a Sunday; doesn’t affect count
$holidays [] = «6 September 2010» ; // Falls on a Monday; reduces count by one
?>
Or, if you just want to know how many work days there are in any given year, here’s a quick function for that one:
Convert UTC dates to local time in PHP
I’m storing the UTC dates into the DB using:
and then I want to convert the saved UTC date to the client’s local time.
11 Answers 11
PHP’s strtotime function will interpret timezone codes, like UTC. If you get the date from the database/client without the timezone code, but know it’s UTC, then you can append it.
Assuming you get the date with timestamp code (like «Fri Mar 23 2012 22:23:03 GMT-0700 (PDT)», which is what Javascript code «»+(new Date()) gives):
Or if you don’t, which is likely from MySQL, then:
Answer
Convert the UTC datetime to America/Denver
This works with dates after 2032, daylight savings and leap seconds and does not depend on the host machine locale or timezone.
It uses the timezonedb to do the calculation, this db changes over time as timezone rules change and has to be updated.
Notes
time() returns the unix timestamp, which is a number, it has no timezone.
date(‘Y-m-d H:i:s T’) returns the date in the current locale timezone.
gmdate(‘Y-m-d H:i:s T’) returns the date in UTC
date_default_timezone_set() changes the current locale timezone
to change a time in a timezone
here you can see all the available timezones
here are all the formatting options
Update PHP timezone DB (in linux)
Because of daylight savings, some dates repeat in some timezones, for example, in the United States, March 13, 2011 2:15am never occurred, while November 6, 2011 1:15am occurred twice. These datetimes can’t be accurately determined.