0

PHP に日付文字列があります。たとえば、 $min_date = "2012-03-30" です。

この日付を JavaScript のDate.UTC関数で実行すると、1333065600000 が得られます。これが必要な値です。

var split_date = min_date.split('-');
Date.UTC(split_date[0],(parseInt(split_date[1])-1),split_date[2]); //gives 1333065600000

PHP でこの値を取得できません。

strtotime($min_date); //gives 1333045800

mktime(23,60,60,intval($split_date[1]),intval($split_date[2]),intval($split_date[0])); //gives 1333132260

javascriptで取得した値をPHPから取得するにはどうすればよいですか? これらの日付はクライアント側で変換するのが面倒な大きな配列になっているため、サーバー側でこの変換を行ってクライアントに送信したいと思います。

PS: 私のサーバー時間は正しく設定されています。

4

4 に答える 4

3

タイムゾーンの違いにより、PHP で正しいタイムスタンプを取得できません。タイムゾーンを UTC に設定すると、javascript と同じ出力が得られます。

# globally
date_default_timezone_set('UTC');
echo strtotime('2012-03-30') . "\n";

# or like @Jim said, only for single operation :
echo strtotime('2012-03-30 UTC') . "\n";

さらに良い解決策は、DateTime クラスを使用することです。

$dt = new DateTime($date, new DateTimeZone('UTC'));
echo $dt->getTimestamp() . "\n";
于 2013-09-20T12:33:34.680 に答える
0

タイムゾーンが正しく設定されていないためです。タイムゾーンを UTC に設定する必要があります。次に、クラスを使用DateTimeして、次のように必要なタイムスタンプを取得できます。

$date = new DateTime('30-03-2012', new DateTimeZone('UTC'));
$ts = $date->getTimestamp()*1000;
echo $ts;

出力:

1333065600000

デモ!

于 2013-09-20T12:40:05.077 に答える
0

Glavic が述べたように、これはタイムゾーンが UTC でないことが原因です。

タイムゾーン設定をグローバルに変更する代わりに、単純に UTC を strtotime に渡すこともできます。

strtotime($min_date. " UTC"); 
于 2013-09-20T12:35:39.590 に答える