Node.js 时区js简单示例奇怪的行为

Node.js 时区js简单示例奇怪的行为,node.js,timezone,Node.js,Timezone,我尝试用node.js和 出于奇怪的原因,我找不到任何能让它工作的例子,比如hello world程序 下面是我的尝试: var timezoneJS = require('timezone-js'); timezoneJS.timezone.zoneFileBasePath = './tz'; timezoneJS.timezone.init(); var getTime = function(timezone) { var UTC = new timezoneJS.Date(new

我尝试用node.js和

出于奇怪的原因,我找不到任何能让它工作的例子,比如hello world程序

下面是我的尝试:

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

timezoneJS.timezone.zoneFileBasePath = './tz';
timezoneJS.timezone.init();

var getTime = function(timezone)
{
  var UTC = new timezoneJS.Date(new Date(), 'Etc/UTC'); //for unknown reason this works only for Etc/UTC

  var YYYY = UTC.getFullYear();
  var MM = UTC.getMonth() + 1;
  var DD = UTC.getDate();
  var hh = UTC.getHours();
  var mm = UTC.getMinutes();
  var ss = UTC.getSeconds();

  var dt = new timezoneJS.Date(YYYY, MM, DD, hh, mm, ss, timezone);

  var date = dt.getFullYear() + '/' + (dt.getMonth() + 1) + '/' + dt.getDate();
  var time = ('0' + dt.getHours()).slice(-2) + ':' + ('0' + dt.getMinutes()).slice(-2) + ':' + ('0' + dt.getSeconds()).slice(-2);

  var datetime = date + ' ' + time;
  return datetime;
};

log(getTime('Europe/London'));
log(getTime('America/New_York'));
结果是:

$ node app
'2014/7/16 14:30:40'
'2014/7/16 14:30:40'
伦敦和纽约也一样。这是怎么发生的?让我知道如何修复


谢谢。

您应该能够省略函数的第一部分,只需执行以下操作:

var dt = new timezoneJS.Date(Date.now, timezone);
它不能像您编写的那样工作的原因是,您正在两个不同的时区中将日期初始化为同一年/月/日/小时/分钟/秒。换句话说,它们不代表当前时间,它们被UTC偏移错误地移动了


你也可以考虑,或./P> 6月16日2014:16:28:24 GMT + 0100(浪漫标准时间),GTM在你的约会中在哪里?对不起,我不理解你的询问。问题由以下答案解决。谢谢回答得很好。我曾经知道moment.js,但现在已经忘记了。那些场景看起来很有前景。非常感谢,马特。