tl; dr: используйте Date.current
и Time.current
вместо Date.today
и Time.now
.
Ваше приложение имеет собственный часовой пояс Time.zone
. Ruby не знает часовых поясов, но Rails знает. Rails частично обновляет Time
и Date
, чтобы знать часовые пояса, но не полностью. Любые методы, добавленные Rails, будут учитывать часовой пояс. Date.yesterday
и Date.tomorrow
, например. Встроенные Ruby методы, которые он оставляет в покое, например Date.today
. Это вызывает некоторую путаницу .
Date.today
дает сегодня по вашему местному часовому поясу +0530. Date.yesterday
дает вчера в соответствии с часовым поясом вашего приложения, который, как я предполагаю, равен +0000 (UT C). 2020-07-10 03:54:46 +0530 - это 2020-07-09 22:24:46 UT C поэтому Date.yesterday
- это 2020-07-08.
Используйте Date.current
вместо Date.today
. Date.yesterday
- это тонкая обертка вокруг Date.current.yesterday
. Точно так же используйте Time.current
вместо Time.now
.
В статье ThoughtBot It's About Time (Zones) подробно обсуждаются часовые пояса Rails и есть простые DO и НЕЛЬЗЯ избегать путаницы с часовыми поясами.
НЕ ИСПОЛЬЗУЙТЕ
- Time.now
- Date.today
- Date.today. to_time
- Time.parse («2015-07-04 17:05:37»)
- Time.strptime (строка, «% Y-% m-% dT% H:% M :% S% z ")
ИСПОЛЬЗОВАТЬ
- Time.current
- 2.hours.a go
- Time.zone.today
- Date.current
- 1.day.from_now
- Time.zone.parse («2015-07-04 17:05:37»)
- Time.strptime (строка, «% Y-% m-% dT% H:% M:% S% z»). In_time_zone