2012-11-17 11 views
0

У меня есть таблица, которую мы используем для регистрации нашей работы. Я прочитал столбец даты из листа в массив, чтобы я мог выполнять действия/вычисления на них. Это не сработало для меня, поскольку я заметил в отладчике, что массив, который содержит даты, имеет значения разных форматов значений даты. Например, некоторые отображаются как «16/11/2012», а некоторые - (new Date(1355184000000)).Конвертация между форматами даты

Может ли кто-нибудь указать способ преобразования всех их в единый формат, чтобы я мог работать с ними?

Thanks

+0

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

ответ

1

Как вы хотите, чтобы ваши даты отображались? Вы хотите, чтобы они были «объектами даты» или строками? значение вы показываете в своем коде (новая дата (1355184000000)) соответствуют Mon Dec 10 16:00:00 PST 2012 Вы можете проверить, что с помощью Logger.log(new Date(1355184000000))

Напротив "16/11/2012", скорее всего, не дата, а строка ... (примечание: странно что вы используете последовательность «день/месяц/год», так как я видел в вашем профиле, что вы в Великобритании, я думал, что вместо этого вы будете использовать mm/dd/yyyy).

Поскольку вы сказали, что вам нужно сделать некоторые вычисления по этим элементам, я думаю, что все они должны быть преобразованы в объекты даты, чтобы использовать их в вашем скрипте. Я бы посоветовал вам взглянуть на some documentation on date object, чтобы узнать, как это можно сделать без возникновения ошибок. Не забывайте, что даты в javascript всегда датируются и время в чч: мм: сс и миллисекунды. Целое значение, которое вы видели, было числом миллисекунд с января первого в 1970 году ;-)
Вы также можете сделать search on dates in this forum и найти много интересной информации.

Вот небольшая функция для иллюстрации:

function playWithTime(){ 
Logger.log('ref date = '+new Date(0)) 
var example = "june 30, 2013 23:59:00" 
Logger.log(example+' = '+ new Date("june 30, 2013 23:59:00")) 
Logger.log(example+' = '+ new Date("june 30, 2013 23:59:00").getTime()+' mS') 
} 

Он покажет это в Logger:

ref date = Thu Jan 01 1970 01:00:00 GMT+0100 (CET) 
june 30, 2013 23:59:00 = Sun Jun 30 2013 23:59:00 GMT+0200 (CEST) 
june 30, 2013 23:59:00 = 1372629540000 mS 

Кстати, обратите внимание, что Logger возвращает значения по-разному, в зависимости от дневного света экономия в вашем часовом поясе ... Я в Бельгии, а июнь - в летнее время (CEST). Он также может отображаться в PDT или PST, который является часовым поясом серверов Google. Вы не можете полагаться на регистраторе быть постоянным (!!), но это уже другая история ;-)


EDIT: Если дата строки в виде дд/мм/гггг, то вы должны, вероятно, изменить порядок его как в этом коде:

function playWithTime2(){ 
Logger.log('original date string in UK format = 16/11/2012') 
var d = "16/11/2012".split('/'); 
var d_ordered=d[1]+'/'+d[0]+'/'+d[2] 
Logger.log('becomes '+d_ordered+' = '+new Date(d_ordered)) 
} 

Который возвращает

original date string in UK format = 16/11/2012 
becomes 11/16/2012 = Fri Nov 16 2012 00:00:00 GMT+0100 (CET) 
+0

Спасибо Серж за подробный и ясный ответ. Теперь, когда я это понимаю, я хочу преобразовать все значения текстовых дат в объекты с листа на дату. Я попытался преобразовать значения в массив, прежде чем применять его к листу с этим кодом, но он, похоже, не работает 'for (var i = 0; i jad

+0

Извините, я не знал о формате даты в Великобритании! рад слышать, что у нас это общее ;-) Я отредактировал свой ответ и предлагаю преобразовать дату как строки –

+0

Большое спасибо за вашу помощь еще раз. Serge :) Я преобразовал их все в существующие объекты и нашел свои данные, выполнив простой расчет, который мне нужен был на их месте в массиве. – jad

Смежные вопросы