0

私のpostgresqlには、タイプタイムスタンプとタイムゾーンを持つ「作成済み」という名前の次の列があります

そのため、UTCと思われる形式に従ってレコードを挿入しました。

2015-10-02 09:09:35+08

私はphp Carbonライブラリを使用しているので、次のことを行いました:

$date = Carbon\Carbon::parse('2015-10-02 09:09:35+08');
echo  $date->->toDatetimeString(); 
//gives result as 2015-10-02 09:09:35

ライブラリを使用して、上記の日時形式に +8 を追加することを含む正しいタイムゾーンをエコーするにはどうすればよいですか? 私が使用しているタイムゾーンは"Asia/Singapore"です。

時刻は、2015-10-02: 17:09:35 のローカル タイミングで出力する必要があります。

4

3 に答える 3

1

標準の PHP を使用してこれを試してください。

$raw = '2015-10-02 09:09:35+08';
$date = substr($raw,0,19);
$tzOffset = (strlen($raw) > 19) ? substr($raw,-3) : 0;
$timestamp = strtotime($date) + (60 * 60 * $tzOffset);
$localTime = date('Y-m-d H:i:s',$timestamp);
echo 'local time:['.$localTime.']';

結果は次のとおりです。

local time:[2015-10-02 17:09:35]

これは、タイム ゾーン オフセットまたは負のオフセットなしでも機能します。

于 2015-10-02T10:17:14.097 に答える
0

これを試して:

$timestamp = '2015-10-02 16:34:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'Asia/Singapore');
于 2015-10-02T09:51:50.560 に答える
0

Carbon を使用せずにネイティブ php を使用してこれを行うことができます。

$time = '2015-10-02 16:34:00+08';
$date = DateTime::createFromFormat('Y-m-d H:i:s+O', $time);
print $date->format('Y-m-d H:i:s') . PHP_EOL;
$date->setTimeZone(new DateTimeZone('Asia/Singapore'));
print $date->format('Y-m-d H:i:s') . PHP_EOL;
$date->setTimeZone(new DateTimeZone('Etc/UTC'));
print $date->format('Y-m-d H:i:s') . PHP_EOL;
于 2015-10-02T10:23:37.170 に答える