我在红宝石上工作。因为我对从当前时区到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')
out的输出为“ 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的帮助?
答案 0 :(得分: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
考虑到可变的客户端时区,建议不要在客户端处理时区转换。如果可能的话,您应该在服务器端执行这些与时区相关的转换,确定默认时区(取决于服务器时区)