您好我是javascript的新手,我尝试了很多我不能得到这种格式 yyyy-mm-ddT00:00:00,我希望在java脚本中获取此格式,以便将其与数组中的其他日期进行比较,然后获得下一个有效日期。
如果有人可以向我展示如何比较并获得比今天更接近的更大日期的功能。
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:我在阵列中有其他日期,但我没有在这里显示它们。
答案 0 :(得分:1)
我认为你在这里有两个不同的问题,要获得一个iso格式的日期字符串,你将使用Date.prototype.toISOString(),但要比较日期并找到最接近你需要将这些字符串转换为日期对象并进行比较
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());
在回答你的问题时,我不能使用上面的代码复制你的未定义问题,并说明diffDate设置正确我把它移到了循环之外,如果你运行代码片段,你应该看到最接近的日期打印
话虽如此,只要现代JS语法适用于您的问题,这可能是一种更简洁的方法来处理您的问题。
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());
要处理时区精度问题,如果可能,您希望日期数组的日期为iso格式'yyyy-mm-ddThh:mm:ssZ' | '2017-12-02T00:00:00Z'
如果您无法编辑日期数组格式,则应确保在创建日期之前附加“Z” :new Date(current + 'Z');
答案 1 :(得分:0)
关于第一个问题,请使用Date对象的ISOString()函数。
对于下一个,要么创建每次的日期对象,然后进行比较,或者如果需要支持相等性检查,请将所有时间从日期对象转换为毫秒。
答案 2 :(得分:0)
使用Date()
对象。输入日期的方法有很多种。一个是你正在使用的。
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