Конвертация даты в UTC - PullRequest
0 голосов
/ 19 октября 2019

Я работаю рубином на рельсах. В этом у меня есть сомнения в преобразовании даты из текущего часового пояса в 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, взят из полей формы 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?

1 Ответ

0 голосов
/ 19 октября 2019

Когда вы делаете moment('2019-10-12', 'Asia/Kolkata'), вы указываете моментам создать момент для 2019-10-12, как если бы вы находились в Asia/Kolkata часовом поясе. Это 2019-10-12T00:00:00+05:30, но это не в UTC. +05:30 означает, что часовой пояс равен Asia\Kolkata, а не означает , что фактическая дата и время равны 2019-10-12 00:05:30

Время выражено по местному времени,вместе со смещением часового пояса в часах и минутах. Смещение часового пояса «+ чч: мм» указывает на то, что в дате / времени используется местный часовой пояс, который на «чч» и «мм» минут опережает UTC. Смещение часового пояса «-чч: мм» указывает, что дата / время используют местный часовой пояс, который на «чч» часы и «мм» минуты отстают от UTC.

С https://www.w3.org/TR/NOTE-datetime

Следовательно, когда вы форматируете его обратно в UTC, вы получите время UTC, которое отстает от 5: 30 часов

. Я бы рекомендовал не обрабатывать преобразования часовых поясов на стороне клиента с учетом переменных часовых поясов клиента. Если возможно, вы должны выполнить эти преобразования, связанные с часовым поясом, на стороне сервера, где вы будете определяться часовым поясом по умолчанию (зависит от часового пояса сервера)

Подробнее здесь: https://thoughtbot.com/blog/its-about-time-zones

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...