如果我在HH:mm
格式中给出了特定时间,例如:22:00
,当我可以安排此事件时如何获得下一个时间戳。
例如:
如果当前时间是22nd April 23:30
,它应该给出23rd April 22:00
(UTC格式没问题,日期仅供参考)
如果当前时间是22nd April 18:00
它应该给22nd April 22:00
require 'time'
✎ today_hour_x = DateTime.parse("22:00")
✎ today_hour_x + (today_hour_x - DateTime.now > 0 ? 0 : 1)
#⇒ #<DateTime: 2019-04-22T22:00:00+00:00 ...>
✎ today_hour_x = DateTime.parse("10:00")
✎ today_hour_x + (today_hour_x - DateTime.now > 0 ? 0 : 1)
#⇒ #<DateTime: 2019-04-23T10:00:00+00:00 ...>
你可以硬编码22,但作为更灵活的方法的想法:
require 'date'
def event_time(hour)
now = Time.now
tomorrow = Date._parse((Date.today + 1).to_s)
now.hour < hour ? Time.new(now.year, now.month, now.day, hour) : Time.new(tomorrow[:year], tomorrow[:mon], tomorrow[:mday], hour)
end
我当地时间4月22日16:16。例如:
event_time(15) # => 2019-04-23 15:00:00 +0300
event_time(22) # => 2019-04-22 22:00:00 +0300
在Rails中你也可以使用Date.tomorrow
,Time.now + 1.day
和其他令人愉快的东西
require 'date'
def event_time(time_str)
t = DateTime.strptime(time_str, "%H:%M").to_time
t >= Time.now ? t : t + 24*60*60
end
Time.now
#=> 2019-04-22 12:13:57 -0700
event_time("22:00")
#=> 2019-04-22 22:00:00 +0000
event_time("10:31")
#=> 2019-04-23 10:31:00 +0000