使用 simple_form gem 保存了错误的日期

Wrong date is saved using simple_form gem

我正在用 simple_form gem 创造新记录。有 2 个字段(start_date 和 end_date)用于日期数据。

有人可以帮助理解为什么保存的日期比在表单中输入的日期晚一天吗?

 #<Book:0x0000...
 id: 16,
 name: "My favorite book",
 start_date: Thu, 30 Jun 2016 00:00:00 EEST +03:00,
 end_date: Thu, 30 Jun 2016 00:00:00 EEST +03:00,
 created_at: Thu, 30 Jun 2016 15:07:57 EEST +03:00,
 updated_at: Thu, 30 Jun 2016 15:07:57 EEST +03:00>

比较:

INSERT INTO `books` (`name`, `start_date`, `end_date`, `created_at`, `updated_at`) VALUES ('My favorite book', '2016-06-29 21:00:00', '2016-06-29 21:00:00', '2016-06-30 12:07:57', '2016-06-30 12:07:57')

我想保存 6 月 30 日,但它存储了 6 月 29 日。怎么可能?

您在 EEST 中输入日期,并在 UTC 中保存日期,因此它会在保存之前减去 3 小时,即前一天的 2100。如果您在使用之前将日期转换回 EEST,您将得到正确的日期。

为什么这样做取决于您的环境。

您的问题与 rails 个时区有关。 您是否像这样在 rails 中设置了时区?

file: config.application.rb

config.time_zone = 'Eastern Time (US & Canada)' config.active_record.default_timezone = :local

如果您这样做,activerecord 将以您当前的时区保存您的数据。