2014-12-15 2 views
0

Я работаю с Google Scripts настолько чистым JS.Строка замените или удалите с помощью массива

У меня есть следующий массив:

[Tue Dec 23 00:00:00 GMT+00:00 2014, 
816.43, 
Tue Jan 28 00:00:00 GMT+00:00 2014, 
729.43] 

Я хочу переформатировать дату, чтобы удалить время и GMT части, так это выглядит следующим образом:

[Tue Dec 23 2014, 
816.43, 
Tue Jan 28 2014, 
729.43] 

Я создал for петлю и я пытаюсь использовать функцию .replace для замены 00:00:00 и GMT+00:00 с просто ничем (aka "") в моем массиве под названием data

var arrayLength = data.length; 
    for (var i = 0; i < arrayLength; i++) { 
    var newData = data[i].replace("00:00:00", ""); 
    } 

Я получаю следующее сообщение об ошибке:

TypeError: Cannot find function replace in object Tue Dec 23 2014 00:00:00 GMT-0000 (GMT) 
+0

ли массив содержит объекты даты или строки? Кроме того, вы не пропустили числовые записи, которые, безусловно, не имеют метода «replace». (т. е. do 'i + = 2' вместо' i ++ ') – apsillers

+1

Возможно, вы не работаете с массивом строк, а вместо этого с массивом объектов Date. – Pointy

+0

Вероятно, он содержит объекты Date – brso05

ответ

0

Если у вас есть дата строка и формат последователен, вы можете переформатировать его использованияКонтактное что-то вроде:

var s = 'Tue Dec 23 00:00:00 GMT+00:00 2014'; 

var m = s.match(/^\w{3} \w{3} \d+|\d+$/g); 
if (m) console.log(m.join(' ')); 

или

var n = s.split(' '); 
console.log([n[0],n[1],n[2],n[5]].join(' ')); 

или

console.log(n[0] + ' ' + n[1] + ' ' + n[2] + ' ' + n[5]); 

Если у вас есть Дата объекты и хотят выводить их в формате, предложенном в OP, вы можете написать простую функцию, как:

function formatDate(d) { 
    var days = ['Sun','Mon','Tue','Wed','The','Fri','Sat']; 
    var months = ['Jan','Feb','Mar','Apr','May','Jun', 
       'Jul','Aug','Sep','Oct','Nov','Dec']; 
    function z(n){return (n<10?'0':'') + n} 
    return days[d.getDay()] + ' ' + months[d.getMonth()] + ' ' + 
     z(d.getDate()) + ' ' + d.getFullYear(); 
} 

console.log(formatDate(new Date(2014,11,2))); // Tue Dec 02 2014 
0

Если (как заявлен в комментариях ОП) вас нужно сравнить две даты, не обращая внимания на время, проще всего написать код для этого. Есть несколько способов подойти к решению проблемы:

  • Вы можете написать функцию, чтобы укоротить дату, так что время 00:00:00.0000
  • Вы можете написать функцию для сравнения двух дат, игнорируя времени пролета день

Какой подход вы выберете, зависит от вашего собственного приложения.

Для сравнения двух дат, игнорируя время:

function sameDay(d1, d2) { 
    return d1.getFullYear() === d2.getFullYear() && 
     d1.getMonth() === d2.getMonth() && 
     d1.getDate() === d2.getDate(); 
} 

Чтобы создать новый экземпляр Date с часами времени в день установить обратно ровно в полночь:

function midnightOf(d) { 
    return new Date(d.getFullYear(), d.getMonth(), d.getDate()); 
} 
0

Try это -

var arrayLength = data.length; 
    for (var i = 0; i < arrayLength; i++) { 
    var newData = data[i].toString().replace("00:00:00", ""); 
    } 

Я думаю, что элементы в массиве «данные» в основном являются объектами Date. Они не строковые.

0

Ну это не даст вам точный формата, который вы дали, но, возможно, это не обязательно (и если это объект дамп, то выход может варьироваться в любом случае):

for (var i = 0, arrayLength = data.length; i < arrayLength; i++) { 
    if (data[i] instanceof Date) { 
     data[i] = [data[i].getDay(), data[i].getMonth(), data[i].getYear()].join(' '); 
    } 
} 

Это предполагается, что вы» re с объектами Date и с использованием этого object's methods. Он также преобразует объекты даты в строку, но из вашего описания я предположил, что в этом случае вам все равно.

0

Вот как вы можете нормализовать массив дат вы, кажется, есть

var arrayLength = data.length; 
for (var i = 0; i < arrayLength; i++) { 
    data[i].setHours(12,0,0,0); // set to noon in case we are crossing DST 
} 
Смежные вопросы