formatDate() дает правильную дату -1 день (Google Apps Script)

Я использую электронную таблицу Google, чтобы ежедневно регистрировать некоторые вещи. Чтобы сделать его удобным для моих коллег, я сделал таблицу как можно более "интерфейсной", в основном она напоминает форму.

Эта "форма" имеет кнопку отправки, которая сохраняет лист и создает новый лист (копию шаблона).

Проблема в том, что сохраненный лист должен быть сохранен с датой из ячейки. НО это сохраняет с датой за день до фактической даты... (!) Я схожу с ума, пытаясь выяснить, почему.

Вот код из скрипта Google Apps, который я вызываю при нажатии кнопки отправки:

function renameSheet() {
var ShootName = SpreadsheetApp.getActiveSheet( ).getRange("G8").getValue();
var DateName1 = SpreadsheetApp.getActiveSheet( ).getRange("A8").getValue();
var newdate = new Date(SpreadsheetApp.getActiveSheet( ).getRange("A8").getValue());
var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");
var NewName = Datename2 + " - " + ShootName;
SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(NewName);
var oldSheet = ss.getActiveSheet();
// create a duplicate of the template sheet
ss.setActiveSheet(ss.getSheetByName("Original0"));
var newSheet = ss.duplicateActiveSheet();
newSheet.activate();
ss.moveActiveSheet(1);
newSheet.setName("NewLog");

}

Если ячейка A8 имеет значение "12.25.16" - лист будет назван "12.24.16".

Если у кого-то есть правильное или даже грязное исправление, я бы хотел это услышать.

1 ответ

Решение

Вы жестко задаете часовой пояс в этой строке:

var Datename2 = Utilities.formatDate(newdate, "PST", "yyyy-MM-dd");

но это не учитывает переход на летнее время и значения только даты в электронных таблицах всегда в 00:00:00 часов, поэтому одна часовая смена может изменить дату...

Замените на автоматическое значение, как это:

var Datename2 = Utilities.formatDate(newdate, Session.getScriptTimeZone(), "yyyy-MM-dd");
Другие вопросы по тегам