Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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


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

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

Ответ 2

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

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

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

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

Ответ 3

Чтобы нормализовать метку времени как целое число с миллисекундами между 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()), прежде чем вычислять соответствующую временную метку.


UPDATE:

В некоторых версиях 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;
    }
}

Ответ 4

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

intval(microtime(true)*1000)

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Надежда поможет.:)

Ответ 8

Чтобы получить миллисекундную метку времени из объекта 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

Ответ 9

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);
}

Ответ 10

У меня недавно была эта проблема, чтобы получить метку времени в миллисекундах. Простое умножение метки времени Unix на 1000 не решило проблему, потому что мне пришлось очень точно сравнивать две записи в базе данных. Очевидно, что объект php datetime не может обрабатывать миллисекунды/микросекунды, но в любом случае он хранится в строке datetime. Итак, вот мое решение:

$dateObject = new \DateTime('2015-05-05 12:45:15.444', new \DateTimeZone('Europe/London')); $millis = $dateObject->format('v'); echo $dateObject->getTimestamp()*1000+$millis;

Это также должно работать с микросекундами, если format->('u') вы используете format->('u') (и, конечно, умножьте метку времени на 1000000). Я надеюсь, что вы найдете это полезным.

Ответ 11

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

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

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

Ответ 12

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