web-dev-qa-db-ja.com

PHP5とActionscript3でミリ秒単位のUNIXタイムスタンプを取得する

Actionscriptでは、ミリ秒単位のUnixタイムスタンプは次のように取得できます。

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

ドキュメントには次のように明記されています。

getTime():Number Dateオブジェクトの世界時で、1970年1月1日の午前0時からのミリ秒数を返します。

トレースすると、次が返されます。

_824655597
_

したがって、824655597/1000/60/60/24/365 = 0.02年です。これは約39年になるはずなので、明らかに正しくありません。

質問#1:ここで何が問題になっていますか?

ここで、PHP=の部分:ミリ秒単位のタイムスタンプも取得しようとしています。microtime()関数は、文字列(0.29207800 1246365903)または浮動小数点のいずれかを返します(1246365134.01)、与えられた引数によって異なります。タイムスタンプは簡単だと思っていたので、自分でこれを行うつもりでした。しかし、このフロートを試して気づき、それをActionscriptの問題と組み合わせると、本当に手がかりはありません。

質問2:Unixタイムスタンプでミリ秒単位の値を返すようにするにはどうすればよいですか?

タイムスタンプはとても簡単なはずです、私はおそらく何かが足りないでしょう...それについて申し訳ありません。前もって感謝します。

EDIT1:最初の質問に自分で回答しました。下記参照。
EDIT2: 2番目の質問にも自分で回答しました。下記参照。 48時間以内に回答を受け入れることができません。

26
Tom

Actionscript3の場合、new Date().getTime()が機能するはずです。


PHPでは、単純に time() を呼び出して、1970年1月1日から経過した時間00:00:00 GMTを秒単位で取得できます。ミリ秒が必要な場合は、(time()*1000)

microtime() を使用する場合、2番目の部分に1000を掛けてミリ秒を取得します。最初の部分に1000を掛けてミリ秒を取得し、それを四捨五入します。次に、2つの数値を加算します。ボイラ。

16
jitter

関数の戻り値の型として符号なし整数を使用しました。これは数値でなければなりません。

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

PHP5でミリ秒を取得する関数を取得したと思います。

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

これを使って:

intval(microtime(true)*1000)
5
Saurabh Kumar

タイムスタンプを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's」のコメントにある注記を参照してください: http://www.php.net/manual/en/function.gmmktime.php

抜粋:ほとんどの目的と目的で、mktime()が最初に入力パラメーターをGMTに変換し、次にGMTタイムスタンプを生成するgmmktime()を呼び出すことを想像できます。

したがって、time()は常に、世界のどこにいても、同じ実際の瞬間に同じものを返します。
gmmktime()およびmktime()は、特定の時間パラメーターが指定された場合、適切なタイムスタンプを計算する前に、適切なタイムゾーン(gmmktime()の場合はGMT、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
bob

php5のmicrotime()は microtime() のようにマイクロ秒のUNIXタイムスタンプを返し、get_as_float引数が指定されていない場合、 "msec sec"としてフォーマットされた文字列を提供するため、最初の部分はミリ秒の部分です2番目は2番目の部分です。 2つに分割するだけで、タイムスタンプの2つの部分が取得されます

4
Knut Haugen

PHPの簡単な答え:

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

私は最近、ミリ秒単位のタイムスタンプを取得するこの問題がありました。 UNIXタイムスタンプに1000を乗算するだけでは問題を解決できませんでした。2つのデータベースエントリを非常に正確に比較する必要があったからです。どうやら、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')を使用する場合(もちろん、タイムスタンプを1000000で乗算する場合)、これはマイクロ秒でも機能するはずです。これがお役に立てば幸いです。

0
rodarmy

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
Ali Najafi

str形式でミリ秒が必要な場合は、次を使用する必要があると思います。

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

これにより、ミリ部分が次のようなミリ秒の例でバグが修正されます:0.056。いくつかの例では、ミリの部分を浮動小数点に変換します。056ではなく56になります。

特に、データを注文するためにミリ秒が必要な場合。

願っています。 :)

0
Lewison Chen

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
John Foley