【问题标题】:How to set server time in Node.js如何在 Node.js 中设置服务器时间
【发布时间】:2018-06-30 19:56:28
【问题描述】:

出于测试目的,我想将我的自定义时间设置(模拟)到 Node.js 服务器。像这样的:

console.log(new Date());
// Sat Jun 30 2018 20:00:00 GMT+0100
//                 ^^
someFunctionToSetTime('Sat Jun 30 2018 12:00:00 GMT+0100')
//                                     ^^
console.log(new Date());
// Sat Jun 30 2018 12:00:00 GMT+0100
//                 ^^

我该怎么做?

附:我真的不想伪造Date 类。

【问题讨论】:

标签: javascript node.js mocking


【解决方案1】:

只需猴子修补 Date 构造函数:

let now = 'Sat Jun 30 2018 12:00:00 GMT+0100';

{
   const oldDate = Date;
   Date = function(...args) {
     if(args.length) {
       return new oldDate(...args);
     } else {
      return new oldDate(now);
    }
  };
  Date.parse = oldDate.parse;
  Date.UTC = oldDate.UTC;
  Date.now = () => +(new Date());
}

【讨论】:

  • 这行得通。但它似乎也删除了本机 Date 类的某些方面。例如,它删除了Date.now 函数。我的项目有依赖于 Date.now 的依赖项,所以这种方法会破坏它们
  • @defraggled 当然,接触这样一个基础类总是会破坏一些东西。这实际上应该仅用于测试目的。为了完整起见,我添加了所有静态方法。
【解决方案2】:

第一个选项:没有外部模块,您可以使用它来获取 node.js 中的时区日期和时间 var myDate = new Date().toLocaleString('en-US', { timeZone: 'Europe/Paris' });

第二个选项:使用momentjs timezone 女巫允许您设置您的位置等等...只需查看文档。

【讨论】:

  • 时区不起作用,因为我想模拟过去一年。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多