Date from milliseconds php

Получение формата даты m-d-Y H: i: s.u из миллисекунд

Я пытаюсь получить отформатированную дату, включая микросекунды из метки времени UNIX, указанной в миллисекундах.

Единственная проблема в том, что я продолжаю получать 000000, например.

$milliseconds = 1375010774123; $d = date("m-d-Y H:i:s.u", $milliseconds/1000); print $d; 

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

17 ответов

Микросекунды (добавлено в PHP 5.2.2). Обратите внимание, что date() всегда будет генерировать 000000 , поскольку он принимает целочисленный параметр, тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с помощью микросекунд.

Так что используйте как можно проще:

$micro_date = microtime(); $date_array = explode(" ",$micro_date); $date = date("Y-m-d H:i:s",$date_array[1]); echo "Date: $date:" . $date_array[0]."
";

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

$t = microtime(true); $micro = sprintf("%06d",($t - floor($t)) * 1000000); $d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) ); print $d->format("Y-m-d H:i:s.u"); // note at point on "u" 

Примечание u — микросекунды (1 секунда = 1000000 мкс).

$d2=new DateTime("2012-07-08 11:14:15.889342"); 

Я ответил на вопрос как краткий и упрощенный для автора. См. Дополнительную информацию для автора: получение формата даты mdY H: i: su от миллисекунд

Я обычно выбираю вторую форму, так как ее легче читать и понимать. Кроме того, DateTime гораздо более гибок и надежен, чем функции даты / времени. Примером может служить обработка микросекунд.

@Anant, это действительно было бы довольно просто. Но ошиблись. 😉 То, что вы получаете, — это просто эпоха в секундах. (К сожалению, не работает и с microtime(false) .)

Этот код не работает правильно на всех языках. В некоторых странах, например в Германии, вместо «.1234» пишут «0,1234» или «0,1234», поэтому ваш код дает мне следующий результат: 2012-07-08 11:14:15.0.889342

Вы можете легко сделать это с помощью входного формата U.u .

$now = DateTime::createFromFormat('U.u', microtime(true)); echo $now->format("m-d-Y H:i:s.u"); 

Это дает следующий результат:

На странице руководства PHP для форматов даты:

Спасибо giggsey за указание на ошибку в моем исходном ответе, добавление number_format() в строку должно исправить регистр точной секунды. Жаль, что это уже не так элегантно .

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', '')); 

Заметка о часовых поясах в ответ на DaVe.

Обычно метод createFromFormat() использует местный часовой пояс, если он не указан.

Однако описанный здесь метод инициализирует объект DateTime с помощью microtime() , который возвращает количество секунд, прошедших с начала эпохи Unix (01 января 1970 г., 00:00:00 по Гринвичу).

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

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

Для выполнения этого требования можно использовать метод setTimeZone() .

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', '')); echo $now->format("m-d-Y H:i:s.u") . '
'; $local = $now->setTimeZone(new DateTimeZone('Australia/Canberra')); echo $local->format("m-d-Y H:i:s.u") . '
';

Производит следующий вывод:

10-29-2015 00:40:09.433818 10-29-2015 11:40:09.433818 

Обратите внимание: если вы хотите ввести данные в mysql, формат времени должен быть следующим:

Примечание: DateTime::createFromFormat(‘U.u’, microtime(true)); вернет false, если microtime(true) выполняется точно в секунду. Он возвращает «1438616239» вместо «1438616239.000000».

Источник

date

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

Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.

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

Замечание: Функция date() всегда будет генерировать 000000 в качестве микросекунд, поскольку она принимает параметр int , тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.

Необязательный параметр timestamp представляет собой метку времени типа int , по умолчанию равную текущему локальному времени, если timestamp не указан или null . Другими словами, значение по умолчанию равно результату функции time() .

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

Возвращает отформатированную строку с датой.

Ошибки

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

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

Версия Описание
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’ );

// выведет: July 1, 2000 is on a Saturday
echo «July 1, 2000 is on a » . date ( «l» , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));

/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );

// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>

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

Пример #2 Экранирование символов в функции date()

Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .

Пример #3 Пример совместного использования функций date() и mktime()

$tomorrow = mktime ( 0 , 0 , 0 , date ( «m» ) , date ( «d» )+ 1 , date ( «Y» ));
$lastmonth = mktime ( 0 , 0 , 0 , date ( «m» )- 1 , date ( «d» ), date ( «Y» ));
$nextyear = mktime ( 0 , 0 , 0 , date ( «m» ), date ( «d» ), date ( «Y» )+ 1 );
?>

Замечание:

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

Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.

Пример #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)
?>

Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format() .

Примечания

Замечание:

Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).

Временную метку начала запроса можно получить из поля $_SERVER[‘REQUEST_TIME’] .

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

  • DateTimeImmutable::__construct() — Возвращает новый объект DateTimeImmutable
  • DateTimeInterface::format() — Возвращает дату, отформатированную согласно переданному формату
  • gmdate() — Форматирует дату/время по Гринвичу
  • idate() — Преобразует локальное время/дату в целое число
  • getdate() — Возвращает информацию о дате/времени
  • getlastmod() — Получает время последней модификации страницы
  • mktime() — Возвращает метку времени Unix для заданной даты
  • IntlDateFormatter::format() — Форматирует значение даты/времени в виде строки
  • time() — Возвращает текущую метку системного времени Unix
  • Предопределённые константы даты и времени

User Contributed Notes

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