在nodejs中有一个测试路由,如下所示
router.get('/testdata', function (req, res) {
var startTime="2016-11-30 23:40:00"
var endTime = new Date("2016-11-30 23:40:00");
endTime.setSeconds(endTime.getMinutes() + 2)
console.log("************getDeviceData*********************")
console.log(startTime)
console.log(endTime);
dataTrackerInfoDetails.timerId = setInterval(function(){
startTime=endTime;
var endTime = new Date(startTime);
endTime= endTime.setSeconds(endTime.getMinutes() + 2)
console.log("************after first*********************")
console.log(startTime)
console.log(endTime);
},dataTrackerInfoDetails.timerInterval*1000);
})
每10秒我需要获得如下所示的日期格式,从当前日期开始增加2分钟
************getDeviceData*********************
2016-11-30 23:40:00
2016-11-30T18:10:42.000Z
************after before*********************
2016-11-30 23:40:00
undefined
但我会得到未定义的
预期产出
************getDeviceData*********************
Start date 2016-11-30 23:40:00
2016-11-30T18:10:42.000Z
************after before*********************
2016-11-30T18:10:42.000Z
2016-11-30T18:10:44.000Z
************after before*********************
2016-11-30T18:10:44.000Z
2016-11-30T18:10:46.000Z.......
注意日期应该是相同的格式2016-11-30T18:10:44.000Z请现在让我怎么做
答案 0 :(得分:0)
您的问题在这里:
setInterval(function(){
startTime=endTime;
var endTime = new Date(startTime);
使用 var 声明 endTime 会在执行函数之前创建一个值为 undefined 的局部变量。所以当行:
startTime=endTime;
执行, startTime 设置为 undefined 。然后:
var endTime = new Date(startTime);
会将无效日期分配给 endTime 。此外,你有:
endTime = endTime.setSeconds(endTime.getMinutes() + 2)
您正在将 setSeconds 与 getMinutes 混合, setSeconds 的返回值是时间值(即数字),而不是日期,所以,即使你修正了其他错误,你也会收到错误,因为数字没有日期方法。
您可能想要做的是:
// Using an IIFE to mimic a callback
(function(){
// Create start and end as Dates, use valid ISO 8601 format
var startTime = new Date("2016-11-30T23:40:00");
var endTime = new Date("2016-11-30T23:40:00");
// Fix second/minutes mixup
endTime.setMinutes(endTime.getMinutes() + 2);
console.log("************getDeviceData*********************")
console.log(startTime)
console.log(endTime);
// Just call the timer
setInterval(function(){
startTime = endTime;
// Don't declare a local endTime
endTime = new Date(startTime);
// Modify endTime in place and fix seconds/minutes
endTime.setMinutes(endTime.getMinutes() + 2)
console.log("************after before*********************")
console.log(startTime)
console.log(endTime);
}, 1000); // run at 1 second intervals for test
}());

您可能希望对其运行频率进行一些限制。保持对 setInterval 返回的值的引用,然后在满足某些条件时使用它来调用clearInterval。
答案 1 :(得分:-1)
setInterval(function(){
var endTime =新日期(" 2016-11-30 23:40:00"); },5000);