質問編集履歴
7
タイムゾーンでの日付の確認 (2) を追記。
test
CHANGED
File without changes
|
test
CHANGED
@@ -166,11 +166,6 @@
|
|
166
166
|
Rails 5.2.6
|
167
167
|
mysql Ver 14.14 Distrib 5.7.36, for Win64 (x86_64)
|
168
168
|
|
169
|
-
|
170
|
-
### 新規投稿作成ページで日付を選択する画面
|
171
|
-
|
172
|
-

|
173
|
-
|
174
169
|
### 夜中の 00:00 を回って明らかになった点
|
175
170
|
|
176
171
|
**1. ビューのエラーメッセージに関する場合分け**
|
@@ -239,14 +234,14 @@
|
|
239
234
|
class ApplicationController < ActionController::Base
|
240
235
|
before_action :set_current_user
|
241
236
|
|
242
|
-
# タイムゾーン
|
237
|
+
# タイムゾーン関連。
|
243
238
|
around_action :user_time_zone, if: @current_user
|
244
239
|
|
245
240
|
def set_current_user
|
246
241
|
@current_user = User.find_by(id: session[:user_id])
|
247
242
|
end
|
248
243
|
|
249
|
-
# タイムゾーン
|
244
|
+
# タイムゾーン関連。
|
250
245
|
private
|
251
246
|
def user_time_zone(&block)
|
252
247
|
Time.use_zone(@current_user.time_zone, &block)
|
@@ -254,93 +249,84 @@
|
|
254
249
|
end
|
255
250
|
```
|
256
251
|
|
257
|
-
|
252
|
+
# タイムゾーンでの日付の確認 (2)
|
258
|
-
|
253
|
+
|
259
|
-
|
254
|
+
- (GMT-01:00) で 4/29 になるタイムゾーン:Cape Verde (GMT-01:00)
|
260
|
-
|
255
|
+
(日本時間 4/30 09:06 に確認、現地時間は 4/29 23:06 (PM))
|
261
|
-
<div>
|
262
|
-
<%= form.select :time_zone, time_zone_options_for_select(@user.time_zone, nil, ActiveSupport::TimeZone) %>
|
263
|
-
</div>
|
264
|
-
<% end %>
|
265
|
-
```
|
256
|
+
```
|
266
|
-
|
267
|
-
# 4つのタイムゾーンでの日付の確認
|
268
|
-
|
269
|
-
タイムゾーンを切り替えながら、各タイムゾーンで日付がどのように認識されるのかを確認。
|
270
|
-
新規投稿作成ページで日付を選択する際に `date < Date.current` を判定しておりますので、そのタイミングで `binding.pry` を挿入し、各タイムゾーンでの日付を確認致しました。
|
271
|
-
|
272
|
-
posts/new.html.erb
|
273
|
-
```Ruby
|
274
|
-
<%= form_with url: "/posts/create", local: true do |form| %>
|
275
|
-
<div>Schedule</div>
|
276
|
-
<div><%= form.datetime_field :date, type: "date", id: "inputDate", value: @post.date&.strftime("%Y-%m-%d"), placeholder: "Y-m-d" %></div>
|
277
|
-
<%= form.submit id: "button", type: "submit", value: "Save", onclick: "myfunk()" %>
|
278
|
-
<% end %>
|
279
|
-
```
|
280
|
-
|
281
|
-
post.rb
|
282
|
-
```Ruby
|
283
|
-
validate :pretend_ago
|
284
|
-
|
285
|
-
def pretend_ago
|
286
|
-
errors.add(:date, 'must be greater than today') if date.present? && date < Date.current
|
287
|
-
binding.pry
|
288
|
-
end
|
289
|
-
```
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
- (GMT-***) で 4/29 になるタイムゾーン:Hawaii (GMT-10:00)
|
295
|
-
(日本時間 4/29 20:26 に確認を行ったので、現地時間は 4/29 01:26 (AM))
|
296
|
-
```
|
297
|
-
[1] pry(#<Post>)> Date.current
|
257
|
+
[1] pry(#<Post>)> Date.current
|
298
|
-
=> Fri, 29 Apr 2022
|
258
|
+
=> Fri, 29 Apr 2022
|
299
|
-
[2] pry(#<Post>)> Date.today
|
259
|
+
[2] pry(#<Post>)> Date.today
|
300
|
-
=>
|
260
|
+
=> Sat, 30 Apr 2022
|
301
261
|
[3] pry(#<Post>)> Date.yesterday
|
302
262
|
=> Thu, 28 Apr 2022
|
303
263
|
[4] pry(#<Post>)> Time.current
|
304
|
-
=> Fri, 29 Apr 2022 0
|
264
|
+
=> Fri, 29 Apr 2022 23:06:53 -01 -01:00
|
305
|
-
```
|
265
|
+
```
|
306
|
-
|
307
|
-
|
266
|
+
|
308
|
-
|
309
|
-
- (GMT+
|
267
|
+
- (GMT+01:00) で 4/30 になるタイムゾーン:Amsterdam (GMT+01:00)
|
310
|
-
(日本時間 4/
|
268
|
+
(日本時間 4/30 09:09 に確認、現地時間は 4/30 01:09 (AM))
|
269
|
+
*サマータイム中で実際は (GMT+2:00) の為、現地時間は 4/30 02:09 (AM)。
|
311
|
-
```
|
270
|
+
```
|
312
|
-
[1] pry(#<Post>)> Date.current
|
271
|
+
[1] pry(#<Post>)> Date.current
|
272
|
+
=> Sat, 30 Apr 2022
|
273
|
+
[2] pry(#<Post>)> Date.today
|
274
|
+
=> Sat, 30 Apr 2022
|
275
|
+
[3] pry(#<Post>)> Date.yesterday
|
313
|
-
=> Fri, 29 Apr 2022
|
276
|
+
=> Fri, 29 Apr 2022
|
277
|
+
[4] pry(#<Post>)> Time.current
|
278
|
+
=> Sat, 30 Apr 2022 02:09:21 CEST +02:00
|
279
|
+
```
|
280
|
+
|
281
|
+
- (GMT-04:00) で 4/29 になるタイムゾーン:Samara (GMT-04:00)
|
282
|
+
(日本時間 4/30 09:16 に確認、現地時間は 4/30 20:16 (PM))
|
283
|
+
```
|
284
|
+
[1] pry(#<Post>)> Date.current
|
285
|
+
=> Fri, 29 Apr 2022
|
314
|
-
[2] pry(#<Post>)> Date.today
|
286
|
+
[2] pry(#<Post>)> Date.today
|
315
|
-
=>
|
287
|
+
=> Sat, 30 Apr 2022
|
316
288
|
[3] pry(#<Post>)> Date.yesterday
|
317
289
|
=> Thu, 28 Apr 2022
|
318
290
|
[4] pry(#<Post>)> Time.current
|
319
|
-
=> Fri, 29 Apr 2022 1
|
291
|
+
=> Fri, 29 Apr 2022 20:16:06 -04 -04:00
|
320
|
-
```
|
292
|
+
```
|
321
|
-
|
293
|
+
|
322
|
-
- (GMT+
|
294
|
+
- (GMT+04:00) で 4/30 になるタイムゾーン:Samara (GMT+04:00)
|
323
|
-
(日本時間 4/
|
295
|
+
(日本時間 4/30 09:17 に確認、現地時間は 4/30 04:17 (AM))
|
324
|
-
```
|
296
|
+
```
|
325
|
-
[1] pry(#<Post>)> Date.current
|
297
|
+
[1] pry(#<Post>)> Date.current
|
298
|
+
=> Sat, 30 Apr 2022
|
299
|
+
[2] pry(#<Post>)> Date.today
|
300
|
+
=> Sat, 30 Apr 2022
|
301
|
+
[3] pry(#<Post>)> Date.yesterday
|
326
|
-
=> Fri, 29 Apr 2022
|
302
|
+
=> Fri, 29 Apr 2022
|
303
|
+
[4] pry(#<Post>)> Time.current
|
304
|
+
=> Sat, 30 Apr 2022 04:17:58 +04 +04:00
|
305
|
+
```
|
306
|
+
|
307
|
+
- (GMT-09:00) で 4/29 になるタイムゾーン:Alaska (GMT-09:00)
|
308
|
+
(日本時間 4/30 09:19 に確認、現地時間は 4/29 15:19 (PM))
|
309
|
+
*サマータイム中で実際は (GMT-8:00) の為、現地時間は 4/29 16:19 (PM)。
|
310
|
+
```
|
311
|
+
[1] pry(#<Post>)> Date.current
|
312
|
+
=> Fri, 29 Apr 2022
|
327
|
-
[2] pry(#<Post>)> Date.today
|
313
|
+
[2] pry(#<Post>)> Date.today
|
328
|
-
=>
|
314
|
+
=> Sat, 30 Apr 2022
|
329
315
|
[3] pry(#<Post>)> Date.yesterday
|
330
316
|
=> Thu, 28 Apr 2022
|
331
317
|
[4] pry(#<Post>)> Time.current
|
332
|
-
=> Fri, 29 Apr 2022
|
318
|
+
=> Fri, 29 Apr 2022 16:19:52 AKDT -08:00
|
333
|
-
|
319
|
+
```
|
334
|
-
|
320
|
+
|
335
|
-
- (GMT+
|
321
|
+
- (GMT+09:00) で 4/30 になるタイムゾーン:Tokyo (GMT+09:00)
|
336
|
-
(日本時間 4/
|
322
|
+
(日本時間 4/30 09:22 に確認、現地時間は 4/30 09:22 (AM))
|
337
|
-
```
|
323
|
+
```
|
338
|
-
[1] pry(#<Post>)> Date.current
|
324
|
+
[1] pry(#<Post>)> Date.current
|
339
|
-
=> Sat, 30 Apr 2022
|
325
|
+
=> Sat, 30 Apr 2022
|
340
|
-
[2] pry(#<Post>)> Date.today
|
326
|
+
[2] pry(#<Post>)> Date.today
|
327
|
+
=> Sat, 30 Apr 2022
|
328
|
+
[3] pry(#<Post>)> Date.yesterday
|
341
|
-
=> Fri, 29 Apr 2022
|
329
|
+
=> Fri, 29 Apr 2022
|
342
|
-
[3] pry(#<Post>)> Date.yesterday
|
343
|
-
=> Fri, 29 Apr 2022
|
344
|
-
[4] pry(#<Post>)> Time.current
|
330
|
+
[4] pry(#<Post>)> Time.current
|
345
|
-
=> Sat, 30 Apr 2022 0
|
331
|
+
=> Sat, 30 Apr 2022 09:22:22 JST +09:00
|
346
|
-
```
|
332
|
+
```
|
6
Moscaw (GMT+03:00) のタイムゾーンで日付を確認した内容を追記。
test
CHANGED
File without changes
|
test
CHANGED
@@ -289,6 +289,36 @@
|
|
289
289
|
```
|
290
290
|
|
291
291
|
|
292
|
+
|
293
|
+
|
294
|
+
- (GMT-***) で 4/29 になるタイムゾーン:Hawaii (GMT-10:00)
|
295
|
+
(日本時間 4/29 20:26 に確認を行ったので、現地時間は 4/29 01:26 (AM))
|
296
|
+
```
|
297
|
+
[1] pry(#<Post>)> Date.current
|
298
|
+
=> Fri, 29 Apr 2022
|
299
|
+
[2] pry(#<Post>)> Date.today
|
300
|
+
=> Fri, 29 Apr 2022
|
301
|
+
[3] pry(#<Post>)> Date.yesterday
|
302
|
+
=> Thu, 28 Apr 2022
|
303
|
+
[4] pry(#<Post>)> Time.current
|
304
|
+
=> Fri, 29 Apr 2022 01:26:20 HST -10:00
|
305
|
+
```
|
306
|
+
|
307
|
+
- (GMT-***) で 4/30 になるタイムゾーン:日本時間で 4/30 の昼過ぎにならないと存在しない。
|
308
|
+
|
309
|
+
- (GMT+***) で 4/29 になるタイムゾーン:Moscaw (GMT+03:00)
|
310
|
+
(日本時間 4/29 23:24 に確認を行ったので、現地時間は 4/29 17:24 (PM))
|
311
|
+
```
|
312
|
+
[1] pry(#<Post>)> Date.current
|
313
|
+
=> Fri, 29 Apr 2022
|
314
|
+
[2] pry(#<Post>)> Date.today
|
315
|
+
=> Fri, 29 Apr 2022
|
316
|
+
[3] pry(#<Post>)> Date.yesterday
|
317
|
+
=> Thu, 28 Apr 2022
|
318
|
+
[4] pry(#<Post>)> Time.current
|
319
|
+
=> Fri, 29 Apr 2022 17:24:42 MSK +03:00
|
320
|
+
```
|
321
|
+
|
292
322
|
- (GMT+***) で 4/29 になるタイムゾーン:Tokyo (GMT+09:00)
|
293
323
|
(日本時間 4/29 20:20 に確認を行ったので、現地時間は 4/29 20:20 (PM))
|
294
324
|
```
|
@@ -302,19 +332,6 @@
|
|
302
332
|
=> Fri, 29 Apr 2022 20:20:02 JST +09:00
|
303
333
|
```
|
304
334
|
|
305
|
-
- (GMT-***) で 4/29 になるタイムゾーン:Hawaii (GMT-10:00)
|
306
|
-
(日本時間 4/29 20:26 に確認を行ったので、現地時間は 4/29 01:26 (AM))
|
307
|
-
```
|
308
|
-
[1] pry(#<Post>)> Date.current
|
309
|
-
=> Fri, 29 Apr 2022
|
310
|
-
[2] pry(#<Post>)> Date.today
|
311
|
-
=> Fri, 29 Apr 2022
|
312
|
-
[3] pry(#<Post>)> Date.yesterday
|
313
|
-
=> Thu, 28 Apr 2022
|
314
|
-
[4] pry(#<Post>)> Time.current
|
315
|
-
=> Fri, 29 Apr 2022 01:26:20 HST -10:00
|
316
|
-
```
|
317
|
-
|
318
335
|
- (GMT+***) で 4/30 になるタイムゾーン:Samoa (GMT+13:00)
|
319
336
|
(日本時間 4/29 20:24 に確認を行ったので、現地時間は 4/30 00:24 (AM))
|
320
337
|
```
|
@@ -327,4 +344,3 @@
|
|
327
344
|
[4] pry(#<Post>)> Time.current
|
328
345
|
=> Sat, 30 Apr 2022 00:24:17 +13 +13:00
|
329
346
|
```
|
330
|
-
- (GMT-***) で 4/30 になるタイムゾーン:日本時間で 4/30 の昼過ぎにならないと存在しない。
|
5
「4つのタイムゾーンでの日付の確認」を追記、application_controller.rb 内の if: @current_user を編集致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -240,7 +240,7 @@
|
|
240
240
|
before_action :set_current_user
|
241
241
|
|
242
242
|
# タイムゾーンの表示に関して。
|
243
|
-
around_action :user_time_zone, if:
|
243
|
+
around_action :user_time_zone, if: @current_user
|
244
244
|
|
245
245
|
def set_current_user
|
246
246
|
@current_user = User.find_by(id: session[:user_id])
|
@@ -263,3 +263,68 @@
|
|
263
263
|
</div>
|
264
264
|
<% end %>
|
265
265
|
```
|
266
|
+
|
267
|
+
# 4つのタイムゾーンでの日付の確認
|
268
|
+
|
269
|
+
タイムゾーンを切り替えながら、各タイムゾーンで日付がどのように認識されるのかを確認。
|
270
|
+
新規投稿作成ページで日付を選択する際に `date < Date.current` を判定しておりますので、そのタイミングで `binding.pry` を挿入し、各タイムゾーンでの日付を確認致しました。
|
271
|
+
|
272
|
+
posts/new.html.erb
|
273
|
+
```Ruby
|
274
|
+
<%= form_with url: "/posts/create", local: true do |form| %>
|
275
|
+
<div>Schedule</div>
|
276
|
+
<div><%= form.datetime_field :date, type: "date", id: "inputDate", value: @post.date&.strftime("%Y-%m-%d"), placeholder: "Y-m-d" %></div>
|
277
|
+
<%= form.submit id: "button", type: "submit", value: "Save", onclick: "myfunk()" %>
|
278
|
+
<% end %>
|
279
|
+
```
|
280
|
+
|
281
|
+
post.rb
|
282
|
+
```Ruby
|
283
|
+
validate :pretend_ago
|
284
|
+
|
285
|
+
def pretend_ago
|
286
|
+
errors.add(:date, 'must be greater than today') if date.present? && date < Date.current
|
287
|
+
binding.pry
|
288
|
+
end
|
289
|
+
```
|
290
|
+
|
291
|
+
|
292
|
+
- (GMT+***) で 4/29 になるタイムゾーン:Tokyo (GMT+09:00)
|
293
|
+
(日本時間 4/29 20:20 に確認を行ったので、現地時間は 4/29 20:20 (PM))
|
294
|
+
```
|
295
|
+
[1] pry(#<Post>)> Date.current
|
296
|
+
=> Fri, 29 Apr 2022
|
297
|
+
[2] pry(#<Post>)> Date.today
|
298
|
+
=> Fri, 29 Apr 2022
|
299
|
+
[3] pry(#<Post>)> Date.yesterday
|
300
|
+
=> Thu, 28 Apr 2022
|
301
|
+
[4] pry(#<Post>)> Time.current
|
302
|
+
=> Fri, 29 Apr 2022 20:20:02 JST +09:00
|
303
|
+
```
|
304
|
+
|
305
|
+
- (GMT-***) で 4/29 になるタイムゾーン:Hawaii (GMT-10:00)
|
306
|
+
(日本時間 4/29 20:26 に確認を行ったので、現地時間は 4/29 01:26 (AM))
|
307
|
+
```
|
308
|
+
[1] pry(#<Post>)> Date.current
|
309
|
+
=> Fri, 29 Apr 2022
|
310
|
+
[2] pry(#<Post>)> Date.today
|
311
|
+
=> Fri, 29 Apr 2022
|
312
|
+
[3] pry(#<Post>)> Date.yesterday
|
313
|
+
=> Thu, 28 Apr 2022
|
314
|
+
[4] pry(#<Post>)> Time.current
|
315
|
+
=> Fri, 29 Apr 2022 01:26:20 HST -10:00
|
316
|
+
```
|
317
|
+
|
318
|
+
- (GMT+***) で 4/30 になるタイムゾーン:Samoa (GMT+13:00)
|
319
|
+
(日本時間 4/29 20:24 に確認を行ったので、現地時間は 4/30 00:24 (AM))
|
320
|
+
```
|
321
|
+
[1] pry(#<Post>)> Date.current
|
322
|
+
=> Sat, 30 Apr 2022
|
323
|
+
[2] pry(#<Post>)> Date.today
|
324
|
+
=> Fri, 29 Apr 2022
|
325
|
+
[3] pry(#<Post>)> Date.yesterday
|
326
|
+
=> Fri, 29 Apr 2022
|
327
|
+
[4] pry(#<Post>)> Time.current
|
328
|
+
=> Sat, 30 Apr 2022 00:24:17 +13 +13:00
|
329
|
+
```
|
330
|
+
- (GMT-***) で 4/30 になるタイムゾーン:日本時間で 4/30 の昼過ぎにならないと存在しない。
|
4
「タイムゾーンに関する設定」を追記致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -105,28 +105,6 @@
|
|
105
105
|
end
|
106
106
|
```
|
107
107
|
|
108
|
-
user.rb
|
109
|
-
```Ruby
|
110
|
-
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }, presence: true, on: :create
|
111
|
-
```
|
112
|
-
|
113
|
-
application_controller.rb
|
114
|
-
```Ruby
|
115
|
-
class ApplicationController < ActionController::Base
|
116
|
-
before_action :set_current_user
|
117
|
-
around_action :user_time_zone, if: :set_current_user
|
118
|
-
|
119
|
-
def set_current_user
|
120
|
-
@current_user = User.find_by(id: session[:user_id])
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
def user_time_zone(&block)
|
125
|
-
Time.use_zone(@current_user.time_zone, &block)
|
126
|
-
end
|
127
|
-
end
|
128
|
-
```
|
129
|
-
|
130
108
|
scheme.rb
|
131
109
|
```Ruby
|
132
110
|
create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
@@ -245,3 +223,43 @@
|
|
245
223
|
=> Fri, 29 Apr 2022 15:00:00 UTC +00:00
|
246
224
|
```
|
247
225
|
↑ 日本時間 (GMT+09:00) で 4月30日6:00(AM) にイベントを開始すると投稿したので、9時間遅い UTC に直すと 4月29日21:00(PM) になるはず…。15:00 とは何の時間なのかが分かりません。
|
226
|
+
|
227
|
+
# タイムゾーンに関する設定
|
228
|
+
|
229
|
+
タイムゾーンに関しては以下の流れで実装しております。
|
230
|
+
[こちらの記事](https://www.bokukoko.info/entry/2018/01/06/141041)を参考に記述致しました。
|
231
|
+
|
232
|
+
user.rb
|
233
|
+
```Ruby
|
234
|
+
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }, presence: true, on: :create
|
235
|
+
```
|
236
|
+
|
237
|
+
application_controller.rb
|
238
|
+
```Ruby
|
239
|
+
class ApplicationController < ActionController::Base
|
240
|
+
before_action :set_current_user
|
241
|
+
|
242
|
+
# タイムゾーンの表示に関して。
|
243
|
+
around_action :user_time_zone, if: :set_current_user
|
244
|
+
|
245
|
+
def set_current_user
|
246
|
+
@current_user = User.find_by(id: session[:user_id])
|
247
|
+
end
|
248
|
+
|
249
|
+
# タイムゾーンの表示に関して。
|
250
|
+
private
|
251
|
+
def user_time_zone(&block)
|
252
|
+
Time.use_zone(@current_user.time_zone, &block)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
```
|
256
|
+
|
257
|
+
users/new.html.erb
|
258
|
+
```Ruby
|
259
|
+
<%= form_with url: users_create_path, local: true do |form| %>
|
260
|
+
<div>Time zone</div>
|
261
|
+
<div>
|
262
|
+
<%= form.select :time_zone, time_zone_options_for_select(@user.time_zone, nil, ActiveSupport::TimeZone) %>
|
263
|
+
</div>
|
264
|
+
<% end %>
|
265
|
+
```
|
3
user.rb と application_controller.rb を追記致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -105,6 +105,28 @@
|
|
105
105
|
end
|
106
106
|
```
|
107
107
|
|
108
|
+
user.rb
|
109
|
+
```Ruby
|
110
|
+
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }, presence: true, on: :create
|
111
|
+
```
|
112
|
+
|
113
|
+
application_controller.rb
|
114
|
+
```Ruby
|
115
|
+
class ApplicationController < ActionController::Base
|
116
|
+
before_action :set_current_user
|
117
|
+
around_action :user_time_zone, if: :set_current_user
|
118
|
+
|
119
|
+
def set_current_user
|
120
|
+
@current_user = User.find_by(id: session[:user_id])
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
def user_time_zone(&block)
|
125
|
+
Time.use_zone(@current_user.time_zone, &block)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
```
|
129
|
+
|
108
130
|
scheme.rb
|
109
131
|
```Ruby
|
110
132
|
create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
2
「夜中の 00:00 を回って明らかになった点」を追記致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -167,7 +167,59 @@
|
|
167
167
|
mysql Ver 14.14 Distrib 5.7.36, for Win64 (x86_64)
|
168
168
|
|
169
169
|
|
170
|
-
### 追記
|
171
|
-
|
172
|
-
新規投稿作成ページで日付を選択する画面
|
170
|
+
### 新規投稿作成ページで日付を選択する画面
|
171
|
+
|
173
172
|

|
173
|
+
|
174
|
+
### 夜中の 00:00 を回って明らかになった点
|
175
|
+
|
176
|
+
**1. ビューのエラーメッセージに関する場合分け**
|
177
|
+
|
178
|
+
- GMT+01:00よりも早いタイムゾーンを選択した場合、いかなるタイムゾーンであっても「今日」を選択すると `Date must be greater than today` のエラーが出る。 4月28日23:59までは「28日」を選択するとエラーが発生。4月29日00:00 (夜中) を回ると「28日」ではエラーが消えるが「29日」を選択するとエラーが発生するようになる(GMT+01:00 でも GMT+09:00 でも同じ)。
|
179
|
+
- GMT+00:00よりも遅いタイムゾーンを選択した場合、いかなるタイムゾーンであっても「今日」を選択しても問題なく動く。4月29日00:00 (夜中) を回った後「28日」は「昨日」になるので、これを選択するとエラーが発生するかと思いきや、 `Date must be greater than today` が出ない。何時を過ぎるとエラーが出るようになるのか、要確認。
|
180
|
+
|
181
|
+
**2. Date.current がタイムゾーン毎にどのような表示になっているか**
|
182
|
+
|
183
|
+
タイムゾーンに東京(GMT+09:00)を選択した場合(01:00AM に確認)。
|
184
|
+
```
|
185
|
+
[1] pry(#<Post>)> Date.current
|
186
|
+
=> Fri, 29 Apr 2022
|
187
|
+
[2] pry(#<Post>)> Time.current
|
188
|
+
=> Fri, 29 Apr 2022 01:00:39 JST +09:00
|
189
|
+
[3] pry(#<Post>)> Time.now
|
190
|
+
=> 2022-04-29 01:00:43 +0900
|
191
|
+
```
|
192
|
+
|
193
|
+
タイムゾーンにモスクワ(GMT+03:00)を選択した場合(01:02AM に確認)。
|
194
|
+
```
|
195
|
+
[1] pry(#<Post>)> Date.current
|
196
|
+
=> Thu, 28 Apr 2022
|
197
|
+
[2] pry(#<Post>)> Time.current
|
198
|
+
=> Thu, 28 Apr 2022 19:02:28 MSK +03:00
|
199
|
+
[3] pry(#<Post>)> Time.now
|
200
|
+
=> 2022-04-29 01:02:32 +0900
|
201
|
+
```
|
202
|
+
|
203
|
+
これを見ると `Date.current` は Rails sysem の timezone +09:00 で動いている訳ではなく、各タイムゾーンのリアルな時間(モスクワであれば +03:00)で判定されているようです。
|
204
|
+
ですが以下が希望の仕様ですので、これは希望していた動きです。
|
205
|
+
> 海外にいるユーザーはそれぞれのタイムゾーンの時間で(UTC や JST を気にすることなく)イベント開始時間を設定出来る。他のユーザーにはタイムゾーン毎に変換された日時で各々のビューに表示される。
|
206
|
+
|
207
|
+
**3. タイムゾーンを東京 (GMT+09:00) に設定してイベントを投稿してみた結果**
|
208
|
+
|
209
|
+
データベースには UTC で保存されておりました。
|
210
|
+
|
211
|
+
```
|
212
|
+
# イベントを作成した日時
|
213
|
+
[1] pry(main)> Post.find(1).created_at
|
214
|
+
Post Load (1.3ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1
|
215
|
+
=> Thu, 28 Apr 2022 15:43:13 UTC +00:00
|
216
|
+
```
|
217
|
+
↑ 日本時間で 4月29日0:43 にイベントを作成したので、9時間遅い UTC に直すと 4月28日15:43 という表示で合っています。
|
218
|
+
|
219
|
+
```
|
220
|
+
# イベントが開始される日時
|
221
|
+
[2] pry(main)> Post.find(1).date
|
222
|
+
Post Load (0.7ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1
|
223
|
+
=> Fri, 29 Apr 2022 15:00:00 UTC +00:00
|
224
|
+
```
|
225
|
+
↑ 日本時間 (GMT+09:00) で 4月30日6:00(AM) にイベントを開始すると投稿したので、9時間遅い UTC に直すと 4月29日21:00(PM) になるはず…。15:00 とは何の時間なのかが分かりません。
|
1
「新規投稿作成ページで日付を選択する画面」を追記致しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -165,3 +165,9 @@
|
|
165
165
|
RubyGems 3.0.3.1
|
166
166
|
Rails 5.2.6
|
167
167
|
mysql Ver 14.14 Distrib 5.7.36, for Win64 (x86_64)
|
168
|
+
|
169
|
+
|
170
|
+
### 追記
|
171
|
+
|
172
|
+
新規投稿作成ページで日付を選択する画面
|
173
|
+

|