В 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,'.',''));