在Rails中特定时区的特定日期午夜的最佳方式

时间:2016-07-19 23:22:26

标签: ruby-on-rails date datetime timezone

我正在使用Rails应用程序,以“YYYY-MM-DD”格式将日期作为字符串提供,我想知道将其转换为在特定时间内设置为午夜的TimeWithZone对象的最佳方法zone,由数据库提供,也是字符串形式。

基本上我想要这个:

  

“2016-06-01”,“America / New_York”=> 2016年6月1日星期三00:00:00 EDT -04:00

     

“2016-06-01”,“Europe / Berlin”=> 2016年6月1日星期三00:00:00 CEST +02:00

     

“2016-01-01”,“America / New_York”=> 2016年1月1日星期五00:00:00 EST -05:00

     

“2016-01-01”,“Europe / Berlin”=> 2016年1月1日星期五00:00:00 CET +01:00

现在我知道肯定 只是Date.parse(x).to_datetime.in_time_zone(y).beginning_of_day因为对于“America / New_York”示例,那将分别产生“星期二,2016年5月31日00:00:00 EDT -04:00”和“星期四,2015年12月31日00:00:00 EST -05:00”,所以我想通过添加来纠正如果utc_offset为负数,那么我建立的方法基本上就是这样:

def midnight_in_time_zone(date_string, time_zone_string)
  time_with_zone = Date.parse(date_string).
    to_datetime.
    in_time_zone(time_zone_string).
    beginning_of_day

  time_with_zone += 1.day if time_with_zone.utc_offset < 0

  time_with_zone
end

这是我想要的方式,但感觉就像我正在以一种黑客的方式重新发明轮子,因为我试图做的事情似乎是这样一个基本功能,所以我想知道是否有内置方法我不知道我可以用来使这更简单,或者如果有人知道更好的方法。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

$(document).ready(load);



function save() {
   var saveDiv = document.getElementsByClassName("testclosed"); 
   if (saveDiv) {

      localStorage.setItem("isMenuOpen", true);

   }

}

function load() {
   var isMenuOpen = localStorage.getItem("isMenuOpen");
   if (isMenuOpen) {

      $(".testitem").removeClass("testclosed");

   }

}

如果time_with_zone.utc_offset的值小于0,此行会自动增加1天

示例结果:

def midnight_in_time_zone(date_string, time_zone_string)
   date_string.in_time_zone(time_zone_string)
end