字符串替换或通过数组删除

时间:2014-12-15 13:46:03

标签: javascript arrays

我正在使用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:00GMT+00:00替换为我的""。数组名为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)

5 个答案:

答案 0 :(得分: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]);

如果您有Date对象并希望以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

答案 1 :(得分:0)

如果(如对OP的评论中所述)你需要比较两个日期而忽略时间,最简单的方法就是编写一些代码来完成它。有几种方法可以解决这个问题:

  • 您可以编写一个截断日期的函数,以便时间为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());
}

答案 2 :(得分:0)

试试这个 -

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

我认为数组'data'中的元素基本上是Date对象。它们不是字符串。

答案 3 :(得分: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(' ');
    }
}

假设您正在处理Date对象并使用object's methods。它还将日期对象转换为字符串,但是根据您的描述,我认为在这种情况下您并不关心它。

答案 4 :(得分: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
}