Intereting Posts
Структура каталога списка PHP и исключить некоторые каталоги доступ к моему почтовому ящику gmail через php-код try catch и несколько операторов mysql insert. Будет ли он принимать все или отклонять все запросы? регулярное выражение для обнаружения чисел, написанных как слова – вход UTF-8 Можете ли вы хранить массив PHP в Memcache? Я не могу найти ошибку в php (все начинается здесь: http://stackoverflow.com/questions/30393024/) Невозможно подключиться к неблокирующему сокету Где я могу добавить вспомогательные функции Laravel 4, которые могут отображать флэш-сообщения? Как я могу сделать поддельную подпись с behat Как написать рекурсивное регулярное выражение, которое соответствует вложенным круглым скобкам? Что делают модификаторы ENT_HTML5, ENT_HTML401, … на html_entity_decode? PHP Создание многомерного массива из массива с реляционными данными Объединить второе текстовое поле с введенным текстовым значением в качестве новой строки в существующем созданном изображении Ограничить работу пользователя на основе IP или в Cookie? Удалите двойные кавычки из строки json_encoded на клавишах

формат даты получения mdY H: i: su от миллисекунд

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

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

date("mdY H:i:su", $milliseconds/1000); 

ех. 07-28-2013 11: 26: 14.000000

Solutions Collecting From Web of "формат даты получения mdY H: i: su от миллисекунд"

PHP.NET говорит :

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

Поэтому используйте просто:

 $micro_date = microtime(); $date_array = explode(" ",$micro_date); $date = date("Ymd H:i:s",$date_array[1]); echo "Date: $date:" . $date_array[0]."<br>"; 

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

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

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

Еще пример:

$ d2 = новый DateTime ("2012-07-08 11: 14: 15.889342");

Ссылка dateTime() на php.net: http://php.net/manual/en/datetime.construct.php

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

Вы можете легко сделать это с использованием формата ввода Uu .

 $now = DateTime::createFromFormat('U.u', microtime(true)); echo $now->format("mdY H:i:su"); 

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

 04-13-2015 05:56:22.082300 

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

  • U = секунды с эпохи Unix
  • u = микросекунды

http://php.net/manual/en/function.date.php


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

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

http://php.net/manual/en/function.number-format.php


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

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

http://php.net/manual/en/datetime.createfromformat.php

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

http://php.net/manual/en/function.microtime.php

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

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

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

http://php.net/manual/en/datetime.settimezone.php

В качестве примера:

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

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

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

Вот несколько более короткий подход. Вместо того, чтобы работать для создания высокоточной числовой даты / времени, я конвертирую значение микросекунды в строку, удаляю 0 и добавляю ее в конец строки даты / времени. Я могу легко обрезать число десятичных знаков, отрегулировав параметр длины строки; здесь я использую 4 чтобы получить миллисекунды, но вы можете использовать 7 для получения микросекунд.

 $t = explode(" ",microtime()); echo date("mdy H:i:s",$t[1]).substr((string)$t[0],1,4); 

Для значения microtime () 0.98236000 1407400573 это возвращается 08-07-14 01:08:13.982 .

Будь проще

 echo date('mdY H:i:').(date('s')+fmod(microtime(true), 1)); 

Я использую

 echo date("Ymd H:i:s.").gettimeofday()["usec"]; output: 2017-09-05 17:04:57.555036 
 // Procedural $fineStamp = date('Ymd\TH:i:s') . substr(microtime(), 1, 9); echo $fineStamp . PHP_EOL; // Object-oriented (if you must). Still relies on $fineStamp though :-\ $d = new DateTime($fineStamp); echo $d->format('Ymd\TH:i:s.u') . PHP_EOL; 

Это основано на ответе от ArchCodeMonkey.

Но просто упрощено, если вы просто хотите что-то быстрое, что работает.

 function DateTime_us_utc(){ return DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', '')); } function DateTime_us(){ $now = DateTime_us_utc(); return $now->setTimeZone(new DateTimeZone(date_default_timezone_get())); } 

Поэтому для меня тогда

 $now = DateTime_us(); $now->format("mdY H:i:su"); 

В документации говорится следующее:

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

Т.е. вместо этого используйте DateTime.

Если вы хотите отформатировать дату, например JavaScript (new Date()).toISOString() по какой-то причине, так вы можете это сделать в PHP:

 $now = microtime(true); gmdate('Ymd\TH:i:s', $now).sprintf('.%03dZ',round(($now-floor($now))*1000)); 

Пример вывода:

 2016-04-27T18:25:56.696Z 

Просто чтобы доказать, что вычитание всего числа не уменьшает точность десятичной части:

 >>> number_format(123.01234567890123456789,25) => "123.0123456789012408307826263" >>> number_format(123.01234567890123456789-123,25) => "0.0123456789012408307826263" 

PHP сделал круглые десятичные знаки, но в обоих случаях они округлили их одинаково.