Рубин: Найти следующую метку времени - PullRequest
0 голосов
/ 22 апреля 2019

Если мне дается определенное время в формате HH:mm, например: 22:00, как получить следующую метку времени, когда я могу запланировать это событие.

Например:

Если текущее время 22nd April 23:30, оно должно быть равно 23rd April 22:00 (формат UTC в порядке, дата указана только для справки)

Если текущее время 22nd April 18:00, оно должно быть равно 22nd April 22:00

Ответы [ 3 ]

0 голосов
/ 22 апреля 2019

Вы можете жестко кодировать 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

Мое местное время сейчас 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 и другие приятные вещи

0 голосов
/ 22 апреля 2019
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 
0 голосов
/ 22 апреля 2019
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 ...>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...