Я недавно принял полностью функционирующий проект, написанный на Ruby на Rails. Сообщалось об ошибке, которую я пытаюсь решить, но не добился большого успеха.
Это код CoffeeScript, который вызывается в коде Haml:
$('#report-datetime-picker').daterangepicker({
timePicker: true,
timePicker12Hour: false,
timePickerIncrement: 5,
format: 'YYYY-MM-DD HH:mm'
}, (start, end) ->
# assign human readable string to input box
# unix times are the real values sent to server. datetime-text-field is just user frontend
$('#datetime-start').val(start.unix())
$('#datetime-end').val(end.unix())
$('#datetime-text-field').val(start.format('YYYY-MM-DD HH:mm') + " - " + end.format('YYYY-MM-DD HH:mm'))
)
и:
%label#datetime-label{ for: 'datetime-text-field' } Date/Time Range
.form-group
.input-group.date#report-datetime-picker
%span.input-group-addon.add-on
%i.fa.fa-calendar
%input.form-control#datetime-text-field{ type: 'text', value: @time_format }
%input#datetime-start{ hidden: true, name: 'startTime', text: 'text', value: (@start_time.to_i rescue nil) }
%input#datetime-end{ hidden: true, name: 'endTime', text: 'text', value: (@end_time.to_i rescue nil) }
%button.btn{ type: 'submit' } Submit
Проблема в том, что когда пользователь выбирает диапазон дат, он конвертируется в его эквивалент UT C относительно текущего системного времени пользователя.
Например, если пользователь в восточном часовом поясе хочет получить ежемесячный отчет и, таким образом, выбирает «4/1/2020 0:00 - 30/30/2020 23:59», он вместо этого отправляет сервер 4/1/2020 04:00 - 5/1/2020 03:59
, из-за которого ежемесячный отчет пропускает первые четыре часа активности и неверно включает первые четыре часа активности следующего месяца. Отношения месяца не могут использоваться, поскольку диапазоны времени не обязательно являются ежемесячным отчетом, хотя это наиболее распространенный вариант использования.
Я проверил application.rb и config.time_zone = 'UTC'
. Я также просмотрел оставшуюся часть кода, и все ссылки на часовые пояса указаны в UT C.
. Я также подтвердил, что если пользователь в восточном часовом поясе выберет «1/1/2020 00:00» в дате сборщик, время, которое фактически сохраняется во время запуска, равно 4/1/2020 04:00
, а не 4/1/2020 00:00
.