【问题标题】:How to verify if a date has expired/passed? [closed]如何验证日期是否已过期/已过? [关闭]
【发布时间】:2016-06-28 14:16:34
【问题描述】:

我有一列日期格式为 dd mmm'yy(例如:26 Jun'17)。如果使用 Ruby 过期,必须检查这些日期。我该怎么做?

谢谢!

【问题讨论】:

  • Ruby parse date string的可能重复
  • 我见过很多狂野和滑稽的日期格式,但那一种真的很尴尬。
  • 我不想将此标记为指定示例的副本,因为该问题已结束。不过,我认为这个问题还不清楚。您是否需要有关解析日期字符串或检查日期是否过期的帮助,或两者兼而有之?如果您需要帮助检查它是否已过期,那么“过期”是什么意思?这是否意味着您需要知道日期是否早于某个固定日期?还是说它比今天大很多天?

标签: ruby


【解决方案1】:
d = "26 Jun'17"
#⇒ "26 Jun'17"
▶ Date.today >= Date.parse(d.tr("'", ' '))
#⇒ false

Date#parse 理解“17 年 6 月 26 日”:

▶ Date.parse d.tr("'", ' ')
#⇒ #<Date: 2017-06-26 ((2457931j,0s,0n),+0s,2299161j)>

【讨论】:

  • “16 Jun 17”是 2016 年还是 2017 年?由于这个原因,两位数的年份是荒谬的。在 1980 年代和 1990 年代,您可以享受不冲突的数字,但直到 2032 年我们才回到正轨。
  • @tadman 好吧,整个 Rails Colossus 都是建立在 conventions 的基础之上的。毕竟01/02/2016 有同样的歧义。 DateTimeXX Jun YY 视为“本世纪 6 月 XX 日 YY 年”,我们可能应该考虑使用它。
  • @tadman 应该用数字表示天,用字母表示月份,用罗马表示年份:17 June MMXVI
  • 也许罗马人正在做点什么。
  • 也许 ISO-8601 有什么作用
【解决方案2】:

您可以使用 Ruby 标准库中的 Date 模块来解析日期字符串,然后使用 &lt;=&gt; 进行比较。

顺便说一句,如果您在“纯”ruby 环境(不是 Rails 控制台)中工作,则必须将其包含到您的代码中:

require 'date'

Date.parse("26 Jun'17") > Date.today               # => true

【讨论】:

    【解决方案3】:

    将其转换为日期时间对象,然后与其他日期时间对象进行比较?

    time_one = DateTime.new(2001,2,3)
    time_two = DateTime.new(2001,1,3)
    
    time_one > time_two
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2021-11-22
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2017-09-13
      相关资源
      最近更新 更多