3

データベースからフェッチした日付を変換したいのですが、これは列タイプを介して生成CURRENT_TIMESTAMPされて格納されておりtimestamp、GMT+8 から GMT+1 に変換されます。

$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time, new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s');

ただし、これは"2012-11-07 15:05:26"の出力を生成しますが、これは間違っていると確信しています。

ここで何が欠けているのでしょうか?

4

3 に答える 3

3

最初に、元のタイムゾーンで datetime オブジェクトをインスタンス化する必要があります。次に、datetime オブジェクトがインスタンス化された後、 でタイムゾーンを調整しDateTime::setTimezone()ます。

Asia/Hong_Kong例として GMT+8 タイムゾーンを使用したこのコードを参照してください。

$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time,new DateTimeZone('Asia/Hong_Kong'));
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s'); // yields 2012-11-07 08:05:26

すべての元の日付が常に一貫して GMT+8 を意味し、PHP アプリケーションも GMT+8 を使用するように設定されている場合 (date_default_timezone_set()たとえば、 で設定)、初期DateTimeZoneオブジェクトを渡す必要はありません。新しく作成されたDateTimeオブジェクトは自動的にそのタイムゾーンで作成されます。

于 2012-11-07T07:33:06.523 に答える
1

多分これが役立つかもしれません。クエリに統合するだけで、コーディングが簡素化されます。

SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');

使用したいタイムゾーンに関する詳細情報をここで入手できます。そして、ここでより多くの理解のために

于 2012-11-07T07:32:23.607 に答える
0

これをチェックして :

<?php

$time = "2012-11-07 15:05:26"; // fetch from database

$tz_object = new DateTimeZone('Europe/Berlin'); 
$datetime = new DateTime($time); 
$datetime->setTimezone($tz_object); 
echo $datetime->format('Y-m-d H:i:s');
//output 2012-11-07 10:35:26
?>
于 2012-11-07T07:25:38.620 に答える