2013-02-13 5 views
14

У меня возникли проблемы с преобразованием строки в объект даты в сценарии приложений Google.Сценарий строки сценария Google Apps на сегодняшний день

Мои даты в следующем формате, с 3-й партии API:

2013-01-17T17:34:50.507 

Я пытаюсь преобразовать это Date объекта:

return Date(stringDate); 

И это возвращается:

Thu Jan 01 01:00:00 GMT+01:00 1970 

Может кто-нибудь сказать мне, что я делаю неправильно, и как решить эту проблему?

Большое спасибо

ответ

6

Это не кажется, что объект Даты знает, как справиться с этой датой. Дата указана в ISO 8601 format. Javascript может обрабатывать даты, если им предоставляется информация о часовом поясе.

Вам нужно будет провести некоторое тестирование, но если указанные вами даты указаны в формате UTC, просто добавьте Z в конец строки даты перед вызовом new Date().

Редактировать: объект Date Script Script не может обрабатывать часовой пояс, отличный от UTC, при анализе даты. I opened an issue for it.

+0

Я подтвердил, что даты, которые я получаю, находятся в GMT, и среда, в которой я находилась, также находится в GMT, - я попытался добавить Z, и, к сожалению, проблема остается. Единственный способ, которым я могу получить объект Date, чтобы представить правильную дату, - это если я инициализирую использование времени posix по какой-то причине, хотя, к сожалению, это не вариант. Спасибо за вашу помощь. – Sherlock

+1

, вы должны вызывать 'new Date (dateString)', а не только 'Date (dateString)'. –

+0

Спасибо, Phil, это сработало – Sherlock

2

Он не работает в GScript, по крайней мере, для меня в то время, когда я его пишу. Это сообщение служит рабочую альтернативу: How do I format this date string so that google scripts recognizes it?

+0

Пожалуйста, не просто укажите ссылки в ответе. По крайней мере, дайте небольшое резюме тому, что объясняется в ссылке. –

+0

Что происходит, если этот ответ StackOverflow был удален его автором по какой-либо причине? Вы должны включить хотя бы обзор представленного решения. –

6

С moment.js, это так просто, как это разобрать любой из ISO 8601 format.

var date = Moment.moment("2013-01-17T17:34:50.507").toDate(); 

Вы можете использовать moment.js для синтаксического анализа произвольной строки даты.

Чтобы использовать moment.js в GAS, вам просто нужно добавить его в редактор сценариев. Откройте свой скрипт в редакторе сценариев GAS и перейдите в раздел «Ресурсы», затем «Библиотеки ...», затем введите этот ключ проекта MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 и нажмите «Добавить». Выберите версию из раскрывающегося списка, затем нажмите «Сохранить». Теперь вы готовы использовать moment.js в GAS.

moment.js может использоваться для синтаксического анализа строки даты, создания форматированной строки даты и многих других манипуляций с датами. Спасибо автору!

Документация к моменту.js here.

+0

+1 для Moment.js, но вы можете предпочесть встроить свои собственные, а не полагаться на библиотеку.Дело в том, что, правильно, moment.js меняется со временем. например отказ от конкретных строк формата даты, с которыми он будет работать, может сломать ваши скрипты, встраивая его самостоятельно, позволяет вам управлять переходом лучше, чем обновляемая версия библиотеки. – Jonathon

+0

@ Jonathon, спасибо за ваш комментарий. Почему бы нам просто не придерживаться версии библиотеки, указанной при добавлении ее в наш скрипт? Поэтому нам не нужно беспокоиться об изменениях в библиотеке. Я пропустил вашу мысль? – kanji

+0

Вы можете. Но если библиотека является только оболочкой GAS в библиотеке .js, хотя я бы предпочел встроить источник, чтобы вы контролировали именно тот вкус, который вы используете. Скорость тоже. – Jonathon