Получение метки времени unix в миллисекундах в PHP5 и Actionscript3


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

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

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

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

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

824655597

Итак, 824655597 / 1000 / 60 / 60 / 24 / 365 = 0.02 годы. Это явно неверно, так как должно быть около 39 годы.

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

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

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

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

ПРАВКА1: Сам ответил на первый вопрос. Смотрите ниже.
ПРАВКА2: Я тоже ответил на второй вопрос. Смотреть ниже. Не могу принять ответ в течение 48 часов.

Author: hakre, 2009-06-30

11 answers

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


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

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

 17
Author: jitter, 2013-03-22 20:27:33

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

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

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

function msTimeStamp() {
    return round(microtime(1) * 1000);
}
 14
Author: Tom, 2009-06-30 13:38:46

Для нормализации метки времени в виде целого числа с миллисекундами между 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 в комментарии "бен в 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;
    }
}
 5
Author: bob, 2012-09-15 08:16:02

Используйте это:

intval(microtime(true)*1000)
 5
Author: Saurabh Kumar, 2014-07-02 11:52:42

Microtime() в php5 возвращает метку времени unix с микросекундами в соответствии с microtime(), и если аргумент get_as_float не указан, он выдает строку в формате "мсек сек", поэтому первая часть - это часть миллисекунды, а вторая - вторая часть. Просто разделите его на две части, и вы получите две части метки времени

 4
Author: Knut Haugen, 2009-06-30 13:10:06

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

function exact_time() {
    $t = explode(' ',microtime());
    return ($t[0] + $t[1]);
}
 2
Author: Dave Crooke, 2014-01-22 18:44:05

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

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

Это исправит ошибку в некотором примере получения миллисекунды, где часть milli выглядит так: 0,056. в каком-то примере преобразуйте часть milli в плавающую, вы получите 56 вместо 056. Я думаю, что кто-то хочет 056.

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

Надеюсь, это поможет.:)

 0
Author: Lewison Chen, 2015-06-26 09:26:39

Чтобы получить метку времени в миллисекундах из объекта 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
 0
Author: John Foley, 2016-10-25 19:35:02

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);
}
 0
Author: Ali Najafi, 2017-11-10 17:35:10

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

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

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

 -1
Author: Dalibor, 2012-12-25 22:36:55
$timestamp = str_replace(".","",number_format((float)microtime(true),2,'.',''));
 -1
Author: user3835050, 2014-07-13 21:31:23