【问题标题】:Date.tomorrow referencing two days from nowDate.tomorrow 参考两天后
【发布时间】:2013-10-17 14:20:57
【问题描述】:

我看到了一些非常奇怪的东西。

<h3><%= (Date.today).strftime("%A, %B %d, %Y")  %></h3>

结果为 2013 年 10 月 9 日,星期三,这是正确的。

但是,这会导致 2013 年 10 月 11 日星期五。

<h3><%= (Date.tomorrow).strftime("%A, %B %d, %Y")  %></h3>

它完全跳过星期四(实际上是明天)。

有什么想法吗?

【问题讨论】:

  • 我假设您在测试时知道确切的时间(和时区)可能会有用。
  • 是的,但是在任何时区情况下,明天都应该是今天之后的 2 天。
  • 我能想到至少一种可能性,在 DST 中断时。对我来说,这分别给出了ThursdayFriday,所以如果我想看到这种现象,我需要确切的时间戳。
  • 即使在 Rails 控制台中 date.today 是 9 号, date.tomorrow 是 11 号。不是 DST,所以不要认为是这样。

标签: ruby-on-rails datetime


【解决方案1】:

方法tomorrow 不在Ruby 中- 仅在Rails 中。也许您的 Ruby 和 Rails 设置为不同的时区。你从 Date.current 中得到了什么,它基本上是今天在 rails 中的?

【讨论】:

  • date.current 我明天得到。这解释了我相信。使这些同步的最佳方法是什么?基本上, date.current 应该是美国的中心时间。谢谢!
  • 我不知道什么是最佳实践,但也许您还没有定义时区 (github.com/rails/rails/blob/master/activesupport/lib/…)。您可能想四处寻找有关此主题的其他线程,暂时通过在今天加上一天来计算明天,而不是调用两种不同的方法。
  • 对我来说,解决这个问题的方法是在 application.rb 时区取消注释 config.time_zone = 'Central Time (US & Canada)'。您在此文件中处理时区。这篇文章也有助于获取更多信息:stackoverflow.com/questions/6118779/…
【解决方案2】:

Rails-Date 提供了current 方法来补充Ruby-Datetoday 方法。所以现在你可以使用:

Date.current     # Rails equivalent of Ruby's - Date.today
Date.tomorrow

对于应该尊重 Rails 时区的所有日期,Ruby-Date.today 保持原样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    相关资源
    最近更新 更多