Javascript 如何使用时区将以毫秒为单位的时间转换为不同的本地时间

Javascript 如何使用时区将以毫秒为单位的时间转换为不同的本地时间,javascript,node.js,datetime,timezone,momentjs,Javascript,Node.js,Datetime,Timezone,Momentjs,我需要使用node.js或JavaScript将以毫秒为单位的时间转换为特定的时区 我有一个unix时间“1497678894647”。我需要将其转换为PDT、MDT、CDT、EDT、MST、EST和IST本地时间 我有以下代码示例 var timezoneJS = require('timezone-js'); var PDT = new timezoneJS.Date('1497680592200', 'America/New_York'); var MDT = new timezoneJ

我需要使用node.js或JavaScript将以毫秒为单位的时间转换为特定的时区

我有一个unix时间“1497678894647”。我需要将其转换为PDT、MDT、CDT、EDT、MST、EST和IST本地时间

我有以下代码示例

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

var PDT = new timezoneJS.Date('1497680592200', 'America/New_York');
var MDT = new timezoneJS.Date('1497680592200', 'America/Chihuahua');
var CDT = new timezoneJS.Date('1497680592200', 'America/Havana');
var EDT = new timezoneJS.Date('1497680592200', 'America/Detroit');
var MST = new timezoneJS.Date('1497680592200', 'America/Creston');
var IST = new timezoneJS.Date('1497680592200', 'Asia/Kolkata');



console.log("PDT  --> ", dt);
console.log("MDT  --> ", dt);
console.log("CDT  --> ", dt);
console.log("EDT  --> ", dt);
console.log("MST  --> ", dt);
console.log("EST  --> ", dt);
console.log("IST  --> ", dt);
但我得到了这样的输出

{ _useCache: false,
  _tzInfo: {},
  _day: NaN,
  year: NaN,
  month: NaN,
  date: NaN,
  hours: NaN,
  minutes: NaN,
  seconds: NaN,
  milliseconds: NaN,
  timezone: 'America/New_York',
  _dateProxy: Invalid Date,
  _timeProxy: NaN }
{ _useCache: false,
  _tzInfo: {},
  _day: NaN,
  year: NaN,
  month: NaN,
  date: NaN,
  hours: NaN,
  minutes: NaN,
  seconds: NaN,
  milliseconds: NaN,
  timezone: 'America/Los_Angeles',
  _dateProxy: Invalid Date,
  _timeProxy: NaN }
PDT  --> Sat Jun 17 2017 11:46:54
MDT  --> Sat Jun 17 2017 11:24:54
CDT  --> Sat Jun 17 2017 11:45:54
EDT  --> Sat Jun 17 2017 11:12:54
MST  --> Sat Jun 17 2017 11:33:54
EST  --> Sat Jun 17 2017 11:22:54
IST  --> Sat Jun 17 2017 12:16:54
我需要像这样打印

{ _useCache: false,
  _tzInfo: {},
  _day: NaN,
  year: NaN,
  month: NaN,
  date: NaN,
  hours: NaN,
  minutes: NaN,
  seconds: NaN,
  milliseconds: NaN,
  timezone: 'America/New_York',
  _dateProxy: Invalid Date,
  _timeProxy: NaN }
{ _useCache: false,
  _tzInfo: {},
  _day: NaN,
  year: NaN,
  month: NaN,
  date: NaN,
  hours: NaN,
  minutes: NaN,
  seconds: NaN,
  milliseconds: NaN,
  timezone: 'America/Los_Angeles',
  _dateProxy: Invalid Date,
  _timeProxy: NaN }
PDT  --> Sat Jun 17 2017 11:46:54
MDT  --> Sat Jun 17 2017 11:24:54
CDT  --> Sat Jun 17 2017 11:45:54
EDT  --> Sat Jun 17 2017 11:12:54
MST  --> Sat Jun 17 2017 11:33:54
EST  --> Sat Jun 17 2017 11:22:54
IST  --> Sat Jun 17 2017 12:16:54

是否可以使用时区将unix时间戳转换为不同的本地时间?

我尝试运行
timezone js
包,但在npm.runkit.com中不断出错, 所以我决定给你们看一个流行音乐的例子。它还有一个子模块
时刻时区

npm install -S moment-timezone
而且使用它很简单

const moment = require('moment-timezone');

let timestamp = moment(1497678894647);
let NYTime = timestamp.tz('America/New_York').format('ddd MMM D Y HH:mm:ss');
console.log(NYTime);
哪些日志:

"Sat Jun 17 2017 01:54:54"
您可以在npm.runkit上看到一个示例

编辑:

因此,给定您的console.log语句,您可以像

var moment = require('moment-timezone');
moment.defaultFormat = 'ddd MMM D Y HH:mm:ss';

var PDT = moment('1497680592200').tz('America/New_York').format();
var MDT = moment('1497680592200').tz('America/Chihuahua').format();
var CDT = moment('1497680592200').tz('America/Havana').format();
var EDT = moment('1497680592200').tz('America/Detroit').format();
var MST = moment('1497680592200').tz('America/Creston').format();
var IST = moment('1497680592200').tz('Asia/Kolkata').format();

使用Javascript,您可以使用以下语法将日期和时间转换为不同的时区

var PDT = new Date(timestamp).toLocaleString('en-US', { timeZone: 'America/Los_Angeles' });
var MDT = new Date(timestamp).toLocaleString('en-US', { timeZone: 'America/Chihuahua' });
var CDT = new Date(timestamp).toLocaleString('en-US', { timeZone: 'America/Havana' });
var EDT = new Date(timestamp).toLocaleString('en-US', { timeZone: 'America/Detroit' });
var MST = new Date(timestamp).toLocaleString('en-US', { timeZone: 'America/Creston' });

希望这能起作用

我很确定您需要将时间戳转换为日期字符串。来自文件timezoneJS.Date(dt_str_tz,[tz])。所以试着改变123412341234->10/31/2008或任何你想要的日期。顺便说一句,你的时区列表有点奇怪。你有去纽约的PDT,选择古巴去CDT,等等。。如果你在寻找美国的主要时区,通常选择的列表(从东到西)是:
美国/纽约
美国/芝加哥
美国/丹佛
美国/凤凰
美国/洛杉矶
美国/安克雷奇
,太平洋/火奴鲁鲁
。IST TIMENW Date()怎么样?toLocaleString('en-US',{时区:'亚洲/加尔各答'})太棒了将代码更改为var zone='Asia/Kolkata'时,日期和时间不正确;var IST=力矩('1497680592200').tz(区域).format()。。。为什么会有这种行为?。我还尝试了使用var IST=moment('1497680592200').tz('“+zone+'”).format();我收到了错误消息。@MattJohnson可能是,moment将以任何方式解析它们。@AbdulManaf您的错误是什么?而且您不必使用串联空字符串作为缓冲区。@Kano-如果您将其作为字符串传递,则还需要将
x
作为参数传递。否则,您将得到一个弃用警告,因为您不能保证回退到
Date
对象的解析器能够正确工作。