Получение метки времени unix в миллисекундах в PHP5 и Actionscript3
в Actionscript метка времени Unix в миллисекундах доступна следующим образом:
public static function getTimeStamp():uint
{
var now:Date = new Date();
return now.getTime();
}
в документе четко указано следующее:
getTime (): Number возвращает количество миллисекундах с полуночи 1 января , 1970, универсальное время, для даты объект.
когда я отслеживаю его, он возвращает следующее:
824655597
Так, 824655597 / 1000 / 60 / 60 / 24 / 365 = 0.02 лет. Это, очевидно, неправильно, так как она должна быть около 39 лет.
Вопрос №1: Что здесь не так?
Теперь, на часть PHP:я пытаюсь получить метку времени в миллисекундах. The microtime()
функция возвращает строку (0.29207800 1246365903) или float (1246365134.01), в зависимости от заданного аргумента. Поскольку я думал, что временные метки просты, я собирался сделать это сам. Но теперь, когда я попытался и заметил этот float, и объединил это с моими проблемами в Actionscript, у меня действительно есть понятия не имею.
Вопрос #2: Как сделать так, чтобы он возвращал количество миллисекунд в метке времени Unix?
временные метки должны быть настолько простыми, я, вероятно, что-то пропустил.. сожалеть об этом. Спасибо заранее.
EDIT1: ответил на первый вопрос сам. Увидеть ниже.
EDIT2: ответил на второй вопрос сам. Увидеть ниже. Не могу принять ответ в течение 48 часов.
11 ответов
для actionscript3, new Date().getTime()
должны работать.
в PHP вы можете просто позвонить time() чтобы получить время, прошедшее с 1 января 1970 00:00: 00 GMT в секундах. Если вы хотите миллисекунды, просто сделайте (time()*1000)
.
Если вы используете microtime () умножьте вторую часть на 1000, чтобы получить миллисекунды. Умножьте первую часть на 1000, чтобы получить миллисекунды и вокруг этого. Затем сложите два числа вместе. Вот.
я использовал целое число без знака в качестве возвращаемого типа функции. Это должен быть номер.
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
выдержка: Для большинства целей и задач вы можете представить, что 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;
}
}
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 некоторые получают миллисекундный пример, где часть milli похожа : 0.056. в некотором примере преобразуйте часть milli в 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, представляющий миллисекунды от эпохи UNIX до начала запроса.