回答編集履歴
3
Laravel5.5について
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
※この試行錯誤の過程でLaravelを5.5にアップデートしたため、以下のコードは5.4で動作しない可能性がありますのでご注意ください。
|
2
|
+
|
1
3
|
アプリ内で使うモデルの共通基底クラスの`asDateTime`をオーバーライドすることで解決しました。
|
2
4
|
```PHP
|
3
5
|
<?php
|
2
DB保存時にタイムゾーンの影響を受けてしまうため修正
answer
CHANGED
@@ -20,6 +20,13 @@
|
|
20
20
|
}
|
21
21
|
return $date;
|
22
22
|
}
|
23
|
+
public function fromDateTime($value)
|
24
|
+
{
|
25
|
+
// DBに保存する際に時刻がタイムゾーンの影響を受けてしまうため、デフォルトのタイムゾーンに戻す処理を挟む
|
26
|
+
return empty($value) ? $value : $this->asDateTime($value)->timezone(config('app.timezone'))->format(
|
27
|
+
$this->getDateFormat()
|
28
|
+
);
|
29
|
+
}
|
23
30
|
}
|
24
31
|
```
|
25
32
|
|
1
注記
answer
CHANGED
@@ -21,4 +21,10 @@
|
|
21
21
|
return $date;
|
22
22
|
}
|
23
23
|
}
|
24
|
-
```
|
24
|
+
```
|
25
|
+
|
26
|
+
ただし、以下のような`HasAttribute#asDateTime`を経由しない処理の場合、当然ながらtime_zoneが適用されません。
|
27
|
+
- `Model`のミューテタ(`getXXXXXAtribute`メソッド)が定義されていたとき
|
28
|
+
- `Model`の`$casts`対象だったとき
|
29
|
+
- `Model`の`$dates`対象でないとき
|
30
|
+
- `HasAttribute#getAttributeFromArray`や`getAttributes`や`getOriginal`を使って直接アクセスしたとき
|