strtotime()
PHPで指定された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
strtotime()
PHPで指定された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
健全な比較のために、同じタイムゾーンを使用する必要があります。
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
このような日付を生成するにはgmdate('r')
、PHPで次を使用できます。
echo gmdate('r', 1296049910);
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");
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