5

このタイムゾーンは本当に悪夢です。データベースにすべての値を UTC として保存しています。私がやりたいことは、ローカル タイムゾーンで DateTime 文字列を返す関数を作成することです。私は Laravel を使用しているので、仕事には Carbon を使用したいと考えています。私は今何度も試みて失敗しました。

$dateasstring= '2014-01-05 12:00:00' //retrieved from databse

この日付は UTC です。UTC として解析して Carbon に変換し、Carbon に時刻を localtimezone に変更するように指示するにはどうすればよいですか? 何か不足していますか?

4

2 に答える 2

8
$carbon = new Carbon\Carbon($dateasstring);
$local = $carbon->timezone($localTimeZone);

// example from artisan tinker:
[1] > $utc = new Carbon\Carbon('2014-01-05 12:00:00');
// object(Carbon\Carbon)(
//   'date' => '2014-01-05 12:00:00',
//   'timezone_type' => 3,
//   'timezone' => 'UTC'
// )
[2] > $warsaw = $utc->timezone('Europe/Warsaw');
// object(Carbon\Carbon)(
//   'date' => '2014-01-05 13:00:00',
//   'timezone_type' => 3,
//   'timezone' => 'Europe/Warsaw'
// )
于 2014-04-16T10:10:21.790 に答える
2

これは私が使用するソリューションです。on 関数を使用して日付を UTC (toutc) にし、1 つの関数を使用してそれを現地時間 (tolocal) に戻します。ユーザーのログイン中に、セッション変数「タイムゾーン」を設定しました。

private function totimezone($utc){
    $usertz = Session::get('timezone');
    $carbon = new Carbon($utc, 'UTC');
    $carbon->timezone = new DateTimeZone($usertz);
    return $carbon;

}

private function toutc($local){
    $usertz = Session::get('timezone');
    $carbon = new Carbon($local, $usertz);
    $carbon->timezone = new DateTimeZone('UTC');
    return $carbon;
}
于 2014-04-17T08:08:20.337 に答える