在nodejs程序中使用timezone-js

时间:2014-01-01 11:06:05

标签: javascript node.js

以下是我编写的使用timezone-js模块为特定时区创建Date对象的代码

require('timezone-js');
var dt = new timezoneJS.Date('2012, 06, 8, 11, 55, 4','Europe/Amsterdam');

我跑了npm install timezone-js并安装了模块。

但是,当我运行程序时,我收到以下错误

var dt = new timezoneJS.Date('2012, 06, 8, 11, 55, 4','Europe/Amsterdam');
             ^
ReferenceError: timezoneJS is not defined
at Object.<anonymous> (/Users/nandish/Documents/MI-Airlines/mi.airline-sync/lib/nodeTest.js:47:15)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

1 个答案:

答案 0 :(得分:0)

使用require时,将结果分配给变量,然后使用该变量。所以:

var timezoneJS = require('timezone-js');

除此之外,这意味着您可以使用您想要的任何名称,例如:

var ts = require('timezone-js');
var dt = new ts.Date(2013, 0, 1);

附注:如果您要使用timezone-js,请务必阅读the setup requirements。它需要区域文件,如果您不提供它们,它将尝试动态加载。我试过的版本有错误检测可用的传输,FWIW(它试图读取它不知道的全局符号被定义,这会引发异常,而不是使用typeof thesymbol而不是)。< / p>

如果您主动抓取该链接中描述的时区文件,并且它们位于您运行脚本的相对路径tz,则可以:

var timezoneJS = require("timezone-js");
var fs = require('fs');

// Give timezoneJS a transport for loading local timezone files.
// This code is extracted from https://github.com/mde/timezone-js/blob/master/spec/test-utils.js
timezoneJS.timezone.transport = function (opts) {
  // No success handler, what's the point?
  if (opts.async) {
    if (typeof opts.success !== 'function') return;
    opts.error = opts.error || console.error;
    return fs.readFile(opts.url, 'utf8', function (err, data) {
      return err ? opts.error(err) : opts.success(data);
    });
  }
  return fs.readFileSync(opts.url, 'utf8');
};

// Init timezones
timezoneJS.timezone.zoneFileBasePath = 'tz'; // <== If you put the files elsewhere, change this
timezoneJS.timezone.init();

// Use it to get a date in Central European Time
var d = new timezoneJS.Date(2013, 7, 1, 'CET');
console.log(d.toString());      // "Local" time for the date instance (CET)
console.log(d.toUTCString());   // UTC

...或者您当然可以使用使用HTTP加载它们的传输。令我感到惊讶的是npm- - timezone-js的打包版本并不默认为某些基于文件的传输而不是查找库(带有损坏的检查)。