UTC中的日期转换

问题描述 投票:0回答:1

我正在红宝石上工作。因此,我对从当前时区到UTC的日期转换有疑问。

日期转换功能是

function date_conversion(date){
    out = moment(date, "DD/MM/YYYY").format('YYYY-MM-DD')
    var utc_time = moment.tz(out, zone).tz('UTC').format();
    return utc_time;
}

这里参数日期设为字符串格式的“ 12/10/2019”,区域设为“亚洲/加尔各答”。

执行date_conversion函数后,值是

   out = moment(date, "DD/MM/YYYY").format('YYYY-MM-DD') 

输出的输出=“ 2019-10-12”

   var utc_time = moment.tz(out, zone).format();

utc_time的值为2019-10-12T00:00:00 + 05:30。使用上面没有问题。但是当我尝试如下转换为UTC时

    var utc_time = moment.tz(out, zone).tz("UTC").format();

我有2019-10-11T18:30:00Z。在这种情况下,我需要UTC的日期,但是该日期不能更改。请告诉任何人有关此的想法

$('#filter_id_linguist').on("click",function (event) {
 if($("#available_for_id").val()){
 var date = $("#available_for_id").val();
 $("#filter_forms_linguist_available_for").val(time_conversion(date));
 }
 else
 {
 $("#filter_forms_linguist_available_for").val("");
 }
});

在上述JavaScript上,我正在使用time_conversion函数。 JS中使用的ID来自以下rails表单字段。

.form-group
= f.label :with_bookings_from_date, "With bookings from", class: 'sr-only'
.input-group.date{ style: "width:180px;", data: { behaviour: 'linguist-datepicker' } }
  // For time zone conversion
  = f.hidden_field :with_bookings_from_date
  = text_field_tag :with_bookings_from_date_display, '', value: @linguist_filter_form.with_bookings_from_date, placeholder: 'With bookings from', class: 'form-control', id: "with_bookings_from_date_id"
  %span.input-group-addon
    %span.glyphicon.glyphicon-calendar


= f.submit 'Filter', class: 'btn btn-default', id: "filter_id_linguist"

我需要有关如何将日期转换为UTC的帮助吗?

ruby-on-rails ruby
1个回答
0
投票

[当您执行moment('2019-10-12', 'Asia/Kolkata')时,您正在告诉momentjs为2019-10-12创建一个矩实例,就像您处于Asia/Kolkata时区一样。这是2019-10-12T00:00:00+05:30,但是不在UTC中。 +05:30只是表示时区为Asia\Kolkata,而并不表示实际的日期时间为2019-10-12 00:05:30

时间以当地时间表示,时区以小时和分钟为单位。时区偏移量为“ + hh:mm”表示日期/时间使用的本地时区比UTC提前“ hh”小时和“ mm”分钟。时区偏移量为“ -hh:mm”表示日期/时间使用的本地时区为UTC后的“ hh”小时和“ mm”分钟。

来自https://www.w3.org/TR/NOTE-datetime

因此,当您将其格式化回UTC时,将获得UTC时间落后5:30hrs

考虑可变的客户端时区,我建议不要在客户端上处理时区转换。如果可能的话,您应该在服务器端执行与时区相关的转换,确定默认时区(取决于服务器时区)

此处有更多详细信息:https://thoughtbot.com/blog/its-about-time-zones

© www.soinside.com 2019 - 2024. All rights reserved.