如何在js中每隔10秒以相同的格式获取时间戳

时间:2017-11-28 11:08:40

标签: javascript node.js date format

在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请现在让我怎么做

2 个答案:

答案 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);