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