以javascript格式获取今日日期,格式为yyyy-mm-ddT00:00:00

get todays date in javascript in format yyyy-mm-ddT00:00:00

您好我是javascript的新手,我尝试了很多我不能得到这种格式
yyyy-mm-ddT00:00:00,我希望在java脚本中获取此格式,以便将其与数组中的其他日期进行比较,然后获得下一个有效日期。

如果有人可以向我展示如何比较并获得比今天更接近的更大日期的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
datesarray = ['2017-12-09T00:00:00' ,'2017-12-13T00:00:00' ,'2017-12-02T00:00:00' ,'2017-12-16T00:00:00']

let diffDate = Infinity;
let now = Date.now;

for (let i = 0; i < datesarray.length; i++) {

            let closest = datesarray[0];
            if (closest > now && closest < diffDate)
            {
                diffDate = closest;
            }

}

这是我尝试但它永远不会进入if语句。
PS:我在阵列中有其他日期,但我没有在这里显示它们。


我认为你有两个单独的问题,要获得一个iso格式的日期字符串,你将使用Date.prototype.toISOString(),但要比较日期并找到最接近你需要将这些字符串转换为日期对象并比较

1
2
3
4
5
6
7
8
9
10
11
let datesArray = ['2017-12-09T00:00:00' ,'2017-12-13T00:00:00' ,'2017-12-02T00:00:00' ,'2017-12-16T00:00:00'];
let diffDate = Infinity;
let now = Date.now();
   
for (let i = 0, len = datesArray.length; i < len; i++) {
  let closest = new Date(datesArray[i]);
  if (closest > now && closest < diffDate) {
    diffDate = closest;
  }
}
console.log(diffDate.toISOString());

编辑1

在回答你的问题时,我不能使用上面的代码复制你的未定义问题,并说明diffDate设置正确我把它移到循环之外,如果你运行代码片段,你应该看到最接近的日期打印。

话虽如此,只要现代JS语法适用于您的问题,这可能是一种更简洁的方法来处理您的问题。

1
2
3
4
5
6
7
const datesArray = ['2017-12-09T00:00:00' ,'2017-12-13T00:00:00' ,'2017-12-02T00:00:00' ,'2017-12-16T00:00:00'];
const dateCompare = (closest, current) => {
  const t = new Date(current);
  return (t > Date.now() && t < closest) ? t : closest;
}
let closest = datesArray.reduce(dateCompare, Infinity)
console.log(closest.toISOString());

编辑2

要处理时区精度问题,如果可能的话,你希望你的日期数组有iso格式'yyyy-mm-ddThh:mm:ssZ' | '2017-12-02T00:00:00Z'的日期,如果你不能编辑日期数组格式,你应该确保在创建日期之前附加'Z':new Date(current + 'Z');


使用Date()对象。输入日期的方法有很多种。一个是你正在使用的。

1
2
3
4
5
6
7
8
9
10
var dateArray = [new Date('2017-12-09T00:00:00'), new Date(2017, 11, 13), new Date(2017, 11, 2), new Date(2017, 11, 16)];
var today = new Date();
var closestDate = new Date(5000, 0, 0);
for (var i = 0; i < dateArray.length; i++) {
    var curr = dateArray[i];
    if(curr > today && curr < closestDate) {
        closestDate = new Date(curr);
    }
}
console.log(closestDate); // Prints Sat Dec 02 2017 00:00:00 GMT-0500 as of 10/19/2017


对于第一个问题,请使用Date对象的ISOString()函数。

https://www.w3schools.com/jsref/jsref_toisostring.asp

对于下一个,要么创建每次的日期对象,然后进行比较,或者如果需要支持相等性检查,请将所有日期对象的转换为毫秒。