Получение timestamp unix в миллисекундах в PHP5 и ActionScript3

В ActionScript временная метка Unix в миллисекундах доступна следующим образом:

public static function getTimeStamp():uint { var now:Date = new Date(); return now.getTime(); } 

Документ четко заявляет следующее:

getTime (): Number Возвращает число миллисекунд с полуночи 1 января 1970 года, универсальное время для объекта Date.

Когда я его отслеживаю, он возвращает следующее:

 824655597 

Итак, 824655597/1000/60/60/24/365 = 0,02 года. Это, очевидно, не так, как должно быть около 39 лет.

Вопрос №1: Что здесь не так?

Теперь, на части PHP: я пытаюсь получить timestamp в миллисекундах там также. Функция microtime() возвращает либо строку (0.29207800 1246365903), либо float (1246365134.01), в зависимости от заданного аргумента. Поскольку я думал, что временные метки были легкими, я собирался сделать это сам. Но теперь, когда я попытался и заметил этот float, и объединить это с моими проблемами в ActionScript, я действительно не знаю.

Вопрос №2: как мне это сделать, возвращает миллисекунды в метке времени Unix?

Временные метки должны быть такими легкими, я, вероятно, что-то пропустил … извините. Заранее спасибо.

EDIT1: Ответ на первый вопрос сам. Смотри ниже.
EDIT2: Ответ на второй вопрос сам по себе. Смотри ниже. Не может принять ответ в течение 48 часов.

Для actionscript3 new Date().getTime() должна работать.


В PHP вы можете просто называть время (), чтобы получить время, прошедшее с 1 января 1970 года 00:00:00 GMT в секундах. Если вы хотите, чтобы миллисекунды просто выполняли (time()*1000) .

Если вы используете microtime (), умножьте вторую часть на 1000, чтобы получить миллисекунды. Умножьте первую часть на 1000, чтобы получить миллисекунды и округлить их. Затем добавьте два числа вместе. Вуаля.

Я использовал unsigned integer как возвращаемый тип функции. Это должно быть число.

 public static function getTimeStamp():Number { var now:Date = new Date(); return now.getTime(); } 

Думаю, я получил функцию для получения миллисекунд в PHP5 сейчас.

 function msTimeStamp() { return round(microtime(1) * 1000); } 

Чтобы нормализовать метку времени как целое число с миллисекундами между Javascript, ActionScript и PHP

Javascript / Actionscript:

 function getTimestamp(){ var d = new Date(); return Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()).valueOf(); } 

PHP:

 function getTimestamp(){ $seconds = microtime(true); // true = float, false = weirdo "0.2342 123456" format return round( ($seconds * 1000) ); } 

См. Примечание PHP в комментарии «ben at sixg dot com»: http://www.php.net/manual/en/function.gmmktime.php

EXCERPT: Для большинства целей и целей вы можете себе представить, что mktime () сначала преобразует ваши входные параметры в GMT, а затем вызывает gmmktime (), который создает временную метку GMT.

Таким образом, time () всегда будет возвращать то же самое в тот же самый фактический момент в любой точке мира.
gmmktime () и mktime (), когда заданы конкретные временные параметры, преобразуйте эти временные параметры из соответствующего часового пояса (GMT для gmmktime (), местного времени для mktime ()), прежде чем вычислять соответствующую временную метку.


ОБНОВИТЬ:

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

PHP

 function getTimestamp($asString=false){ $seconds = microtime(true); // false = int, true = float $stamp = round($seconds * 1000); if($asString == true){ return sprintf('%.0f', $stamp); } else { return $stamp; } } 

Использовать это:

 intval(microtime(true)*1000) 

microtime () в php5 возвращает временную метку unix с микросекундами в соответствии с microtime (), и если аргумент get_as_float не предоставляется, он дает строку, отформатированную как «msec sec», поэтому первая часть представляет собой миллисекундную часть, а вторая – вторую часть , Просто разделите его на две части, и вы получите две части метки времени

Простой ответ для PHP:

 function exact_time() { $t = explode(' ',microtime()); return ($t[0] + $t[1]); } 

когда вам понадобится миллисекунда в формате str, я думаю, вы должны использовать:

 public function get_millisecond() { list($milliPart, $secondPart) = explode(' ', microtime()); $milliPart = substr($milliPart, 2, 3); return $secondPart . $milliPart; } 

это исправит ошибку int some get millisecond example, где милли-часть похожа: 0,056. в каком-то примере преобразовать милли-часть в float, ваша будет получать 56 вместо 056. Я думаю, что кто-то хочет 056.

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

надеюсь, поможет. 🙂

Чтобы получить миллисекундную метку времени из объекта PHP DateTime:

 <?php date_default_timezone_set('UTC'); $d = new \DateTime('some_data_string'); $mts = $d->getTimestamp().substr($d->format('u'),0,3); // millisecond timestamp 

PHP 7 Эта функция объявляет свой тип возврата.

 function timestamp_ms(): int { $times = gettimeofday(); $seconds = strval($times["sec"]); $milliseconds = strval(floor($times["usec"]/1000)); $missingleadingzeros = 3-strlen($milliseconds); if($missingleadingzeros >0){ for($i = 0; $i < $missingleadingzeros; $i++){ $milliseconds = '0'.$milliseconds; } } return intval($seconds.$milliseconds); } 

PHP 5

 function timestamp_ms() { $times = gettimeofday(); $seconds = strval($times["sec"]); $milliseconds = strval(floor($times["usec"]/1000)); $missingleadingzeros = 3-strlen($milliseconds); if($missingleadingzeros >0){ for($i = 0; $i < $missingleadingzeros; $i++){ $milliseconds = '0'.$milliseconds; } } return intval($seconds.$milliseconds); } 

Что-то вроде этого:

$mili_sec_time = $_SERVER['REQUEST_TIME_FLOAT'] * 1000;

Дает тип float, представляющий miliseconds от эпохи UNIX до начала запроса.

 $timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));