Как сравнить две даты в разных зонах в рубине - PullRequest
1 голос
/ 30 мая 2019

Как сравнить эти две даты в разных часовых поясах в рубине

Код:

if (mydate.to_datetime -
        (120).minutes).to_datetime >
            DateTime.now

puts mydate # 2019-05-30 20:42:34
mydate.to_time # 2019-05-30T20:42:34+00:00
# after subtracting 120 minutes 2019-05-30T18:42:34+00:00
puts DateTime.now # 2019-05-30T20:24:12+05:30

Мне нужно вычесть 120 минут из mydate и сравнить с currentdate.

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Разница в днях:

%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
  map { |d| DateTime.iso8601(d) }.reduce(:-)
#⇒ (1649/7200)

В часах:

%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
  map { |d| DateTime.iso8601(d) }.reduce(:-) * 24
#⇒ (1649/300)

В минутах:

%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
  map { |d| DateTime.iso8601(d) }.reduce(:-) * 24 * 60
#⇒ (1649/5)

Результат - Rational для сохранения точности. Можно преобразовать его в целое число, число с плавающей запятой или десятичное число.

1 голос
/ 30 мая 2019

Time.parse может обрабатывать часовые пояса без проблем:

2.5.1 :001 > require 'time'
 => true 
2.5.1 :002 > t1 = Time.parse('2019-05-30T19:37:18+00:00')
 => 2019-05-30 19:37:18 +0000 
2.5.1 :003 > t2 = Time.parse('2019-05-30T19:37:30+05:30')
 => 2019-05-30 19:37:30 +0530 
2.5.1 :004 > t1 > t2
 => true 
2.5.1 :005 > t2 > t1
 => false 
2.5.1 :006 > t1 == t2
 => false 
2.5.1 :007 > t1 - t2
 => 19788.0 # result is in seconds, convert to whatever you need

Предполагая, что вы уже объявили эти две переменные как DateTime экземпляры, где t1 равно 2019-05-30T19:37:18+00:00, а t2 равно 2019-05-30T19:37:30+05:30, вы можете напрямую запускать сравнения и получать результаты в считанные секунды, используя .to_time

2.5.1 :009 > t1 > t2
 => true 
2.5.1 :010 > t2 > t1
 => false 
2.5.1 :011 > t1 == t2
 => false
2.5.1 :012 > t1.to_time - t2.to_time
 => 19788.0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...