Я создаю серию событий в Календаре Google на основе информации из таблиц Google, связанных с формой Google.Работа с датами - это беспорядок, и я получаю ошибочные результаты.
У меня есть поле в электронной таблице с начальной датой, показанной как YYYY/MM/DD
У меня есть поле с начальным временем, показанным как HH:mm
У меня есть поле с окончанием ВРЕМЯ, показанное как HH:mm
Я понимаю, что внутренне время связано с годом / месяцем / днем, и у ДАТЫ также есть время, связанное, которые не показаны.
В конечном итоге мне нужно будет создать серию событий календаря, используя часть DATE из DATE и часть TIME от времени, которое я могу изменить, используя методы setHours()
setMinutes()
.
Теперь моя проблема заключается в создании согласованного объекта Date из значения ячейки DATE, которое, как кажется, странно меняется.
var ssTZ = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
var SSDate = ss.getRange(6,8).getValue();
var dataStart = Utilities.formatDate(SSDate, 'America/Brasilia' , 'MMMM dd, yyyy 12:00:00 Z');
var dataStartTZ = Utilities.formatDate(SSDate, ssTZ , 'MMMM dd, yyyy 12:00:00 Z');
var dataStartSP = Utilities.formatDate(SSDate, 'America/Sao_Paulo' , 'MMMM dd, yyyy 12:00:00 Z');
var dataStartOS = Utilities.formatDate(SSDate, 'GMT-3' , 'MMMM dd, yyyy 12:00:00 Z');
var date = new Date(dataStart);
var dateTZ = new Date(dataStartTZ);
var dateSP = new Date(dataStartSP);
var dateOS = new Date(dataStartOS);
Logger.log("Spreadsheet TimeZone: " + ssTZ);
Logger.log(SSDate);
Logger.log("");
Logger.log(date);
Logger.log(dateTZ);
Logger.log(dateSP);
Logger.log(dateOS);
Этот код создает следующие выходные данные журнала:
[19-07-02 20: 39: 49: 780 BRT] Электронная таблица TimeZone: Америка / Sao_Paulo
[19-07-02 20: 39: 49: 781 BRT] Вт 12 января 00:00:00 GMT-02: 00 2016
[19-07-02 20: 39: 49: 782 BRT]
[19-07-02 20: 39: 49: 784 BRT] Вт 12 января 10: 00: 00 GMT-02: 00 2016
[19-07-02 20: 39: 49: 784 BRT] Вт 12 января 12:00:00 GMT-02: 00 2016
[19-07-02 20: 39: 49: 785 BRT] Вт 12 января 12:00:00 GMT-02: 00 2016
[19-07-02 20: 39: 49: 786 BRT] Понедельник 11 января 13:00:00GMT-02: 00 2016
, которые не имеют смысла, поскольку все используемые часовые пояса должны фактически быть одинаковыми.
EDIT .... Addedinfo
По запросу @TheMaster журналы от переменных в формате Text:
Logger.log(dataStart);
Logger.log(dataStartTZ);
Logger.log(dataStartSP);
Logger.log(dataStartOS);
[19-07-03 12: 39: 33: 099 BRT] 12 января 2016 г. 12:00:00 + 0000
[19-07-03 12: 39: 33: 100 BRT] 12 января 2016 г. 12:00:00 -0200
[19-07-03 12:39: 33: 100 BRT] 12 января 2016 г. 12:00:00 -0200
[19-07-03 12: 39: 33: 100 BRT] 11 января 2016 г. 12:00:00 -0300
Первые 3 выхода, как объясняет @ziganotscha, связаны с изменением летнего времени на GMT-2, и Америка / Бразилиа не распознается как действительный часовой пояс.
Я все еще удивленпочему он меняется на 11 января, когда GMT-3обозначается как Часовой пояс.
Кроме того, если я создаю объект Date непосредственно из значения ячейки без форматирования, я получаю другое время:
var rawDate = new Date(SSDate);
19-07-03 12:39: 33: 101 BRT] rawDate: вт 12 января 2016 00:00:00 GMT-0200 (BRST)
Я ненавижу иметь дело с датами ... так запутанно ...