Node.js 如何在节点应用程序&x27;中更改服务器时间;例如

Node.js 如何在节点应用程序&x27;中更改服务器时间;例如,node.js,Node.js,我有一个非常依赖时间的应用程序。为了简化测试,我希望能够在特定时间点启动节点应用程序 NODE_FAKE_TIME=true node app.js 我在app.js中使用了类似的东西 if(process.env.NODE_FAKE_TIME) { var time = parseInt(moment(moment().format('YYYY-MM-DD 04:00:00')).format('XSSS')); var clock = sinon.useFakeTimers(t

我有一个非常依赖时间的应用程序。为了简化测试,我希望能够在特定时间点启动节点应用程序

NODE_FAKE_TIME=true node app.js 
我在app.js中使用了类似的东西

if(process.env.NODE_FAKE_TIME) { 
  var time = parseInt(moment(moment().format('YYYY-MM-DD 04:00:00')).format('XSSS'));
  var clock = sinon.useFakeTimers(time, "Date");    
}
然而,除了使用sinon的useFakeTimers,还有更好的方法吗?因为这样做是的,它确实改变了时钟时间。。。。但是,它会影响其他事情,如设置间隔和设置超时

我只是想用一种干净的方式来指定应用程序眼中的时间,这样无论我在哪里使用Date。现在它都会偏离我在运行时指定的时间


谢谢,

我在单元测试中通过在日期直接替换方法完成了这项工作:

    var oldNow = Date.now;
    var oldGetTime = Date.prototype.getTime;

    Date.now = function() { return 0; }
    Date.prototype.getTime = Date.now;

上面将自1970年1月1日起的时间00:00:00设置为零-只需将返回值替换为您感兴趣的时间。

我发现最好的方法是使用var clock=sinon.useFakeTimers(date,“date”);然后使用时钟。勾选(1000)

允许您指定运行时的日期,方法是在时间戳中提供日期,然后指定刻度之间的毫秒数

例如:

  var time = some_timestamp_here;
  var clock = sinon.useFakeTimers(time, "Date");

  // Every second tick the clock ahead one hour
  setInterval(function(){
    clock.tick(3600000);
  }, 1000);