Скрипты приложения new Date и getTime не ведут себя как в браузере - PullRequest
0 голосов
/ 19 октября 2018

В консоли браузера я могу анализировать даты и получать их время в миллисекундах:

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());
}

enter image description here
enter image description here

Я что-то упустил или new Date() / getTime() просто сломан в скриптах приложения?

Я запускаю вышеуказанный скрипт в Google Sheet

Ответы [ 3 ]

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

Google Apps Script использует 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

Примечание:

  • В вашем случае в скрипте Служб Google часовой пояс скрипта отражается на результате.Часовой пояс для этой ситуации можно увидеть в редакторе сценариев.
    • В редакторе сценариев.
      • Файл -> Свойства проекта -> Информация -> Часовой пояс
    • Вы также можете подтвердить это с помощью Logger.log(Session.getScriptTimeZone()) скрипта.
  • new Date('2018-10-16T12:41:50') также можно анализировать.

Ссылки:

Еслиэто не то, что вы хотите, извините.

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

Я что-то упустил или новые Date () / getTime () просто повреждены в скриптах приложения?

В настоящее время Сценарии Google Apps и ChromeМеханизмы JavaScript не одинаковы.С другой стороны, каждый из них выполняет сценарии в разных контекстах, так как Google Apps Script запускает сценарии на серверах Google, а Chrome запускает сценарии на компьютере пользователя.

Я делаю акцент на «в это время», потому что в Google I / OВ 2018 году было объявлено, что Google Apps Script будет работать на V8.

Related

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

Вместо этого

  Logger.log(new Date('2018-10-16 12:41:50.000000').getTime());

используйте это

  Logger.log((new Date('2018-10-16 12:41:50.000000')).getTime());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...