回答編集履歴

3

Laravel5.5について

2018/01/11 05:03

投稿

masaya_ohashi
masaya_ohashi

スコア9210

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保存時にタイムゾーンの影響を受けてしまうため修正

2018/01/11 05:03

投稿

masaya_ohashi
masaya_ohashi

スコア9210

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

注記

2018/01/11 04:49

投稿

masaya_ohashi
masaya_ohashi

スコア9210

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`を使って直接アクセスしたとき