web-dev-qa-db-ja.com

PHP strtotimeとJavaScript Date.parseが異なるタイムスタンプを返す

PHPのstrtotime()で指定されたJavaScriptで同じ日時の秒の値を取得しています。しかし、私はJavaScriptで同じ値が必要です。

PHPコード

echo strtotime("2011-01-26 13:51:50");
// 1296046310

JavaScriptコード

var d = Date.parse("2011-01-26 13:51:50");
console.log(d);
// 1296030110000
19
Puzzled Boy

正気な比較には同じタイムゾーンを使用する必要があります。

_echo strtotime("2011-01-26 13:51:50 GMT");
// 1296049910

var d = Date.parse("2011-01-26 13:51:50 GMT") / 1000;
console.log(d);
// 1296049910
_

更新

標準によれば、RFC 2822形式の日付のみが適切にサポートされています。

_Date.parse("Wed, 26 Jan 2011 13:51:50 +0000") / 1000
_

そのような日付を生成するには、PHPでgmdate('r')を使用できます。

_echo gmdate('r', 1296049910);
_
24
Ja͢ck

JavaScriptはタイムスタンプとしてミリ秒を使用しますが、PHPは秒を使用します。その結果、1000倍ずれているため、非常に異なる日付を取得します。

サンプル

echo date('Y-m-d', TIMESTAMP / 1000);

コメント応答

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

    function toTimestamp(year,month,day,hour,minute,second)
    {
        var datum = new Date(Date.UTC(year,month-1,day,hour,minute,second));
        return datum.getTime()/1000;
    }

    $(function()
    {
        console.log(toTimestamp(2011,01,26,13,51,50));

    });

</script>

<?php

echo $the_date = strtotime("2011-01-26 13:51:50");
4
Dipesh Parmar

strtotime()Date.parse()は、それぞれ秒とミリ秒の精度でUNIXタイムスタンプを生成します。ただし、タイムゾーン情報が入力文字列から欠落している場合は、現地時間が想定されます。したがって、PHP(またはJavaScript)を使用して両方のマシンでタイムスタンプを生成しても、入力文字列2011-01-26T13:51:50は異なるマシンで異なる出力を生成する可能性があります。

解決策は、文字列でタイムゾーンを明示的に指定することです。これにより、どのマシンでも同じ結果が得られます。

Date.parse("Jan 26, 2011 13:51:50 GMT+0500") / 1000; // 1296031910
strtotime("Jan 26, 2011 13:51:50 GMT+0500");         // 1296031910
3
Salman A