В моей консоли браузера я могу анализировать даты и получать их время в миллисекундах:
new Date('2018-10-16 12:41:50.000000');
// => Tue Oct 16 2018 12:41:50 GMT+0200 (Central European Summer Time)
new Date('2018-10-16 12:41:50.000000').getTime();
// => 1539686510000
Если я сделаю то же самое в сценариях приложений, дата не будет распознана (по умолчанию - начало эпохи 1970 года), и getTime() просто сломается (NaN):
function test_date() {
Logger.log('new Date(date)');
Logger.log(new Date('2018-10-16 12:41:50.000000'));
Logger.log('getTime()');
Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());
}
Я что-то упускаю или new Date() / getTime() просто не работает в сценариях приложений?
Я запускаю приведенный выше скрипт в Google Sheet
Возможный дубликат Почему мой объект Date в скрипте Google Apps возвращает NaN



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо этого
Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());
использовать этот
Logger.log((new Date('2018-10-16 12:41:50.000000')).getTime());
Скрипт Google Apps использует RFC3339. Таким образом, 2018-10-16 12:41:50.000000 не может быть проанализирован напрямую с помощью new Date('2018-10-16 12:41:50.000000'). Таким образом, new Date('2018-10-16 12:41:50.000000') совпадает с new Date(''), и оба результата превращаются в Thu Jan 01 01:00:00 GMT+01:00 1970. Чтобы проанализировать дату, как насчет изменения формата RFC3339?
Logger.log(new Date('2018-10-16 12:41:50.000000'));
Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());
Logger.log(new Date('2018-10-16T12:41:50.000Z'));
Logger.log(new Date('2018-10-16T12:41:50.000Z').getTime());
Tue Oct 16 12:41:50 GMT+02:00 2018
1.53968651E12
Logger.log(Session.getScriptTimeZone()) скрипта.new Date('2018-10-16T12:41:50') также можно разобрать.Если это было не то, что вам нужно, извините.
Am I missing something or are new Date() / getTime() simply broken in App Scripts?
На данный момент движки Google Apps Script и JavaScript в Chrome не совпадают. С другой стороны, каждый из них выполняет сценарии в разных контекстах, поскольку сценарий Google Apps запускает сценарии на серверах Google, а Chrome запускает сценарии на компьютере пользователя.
Я делаю акцент на «сейчас», потому что на Google I / O 2018 было объявлено, что скрипт Google Apps будет работать на V8.
Связанный
Будьте очень осторожны, анализируя даты с не указанным часовым поясом. Я видел, как Chrome принимает местный часовой пояс устройства, а сафари форсирует UTC. Ночной кошмар. Если вы не знаете часовой пояс, безопаснее всего принудительно выполнить сериализацию и десериализацию UTC, по крайней мере, так вы получите согласованное поведение и ваши даты не будут увеличиваться волшебным образом.