2017-06-17 103 views
1

我需要使用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 

是否可以使用时区以UNIX时间戳转换到不同的本地时间的输出?

+0

我很确定你需要将你的时间戳转换成日期字符串。来自docs timezoneJS.Date(dt_str_tz,[tz])。因此,请尝试更改123412341234 - > 10/31/2008或您想要的任何日期。 –

+0

你的时区列表有点奇怪,顺便说一句。如果你在寻找美国的主要时区,通常选择的列表(从东到西)是:'America/New_York','America/Chicago美国/丹佛,美国/凤凰,美国/洛杉矶,美国/安克雷奇,太平洋/檀香山。 –

回答

1

我试图运行timezone-js包,但在npm.runkit.com一直得到错误, 所以我决定向您展示与流行的moment.js一个例子。它也有一个子模块moment-timezone

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 here一个例子。

编辑:

所以给你的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(); 
+0

它正在为我工​​作 –

+0

太棒了! :) – Kano

+0

当我的代码更改为var zone ='Asia/Kolkata'时,我得到了错误的日期时间; var IST = moment('1497680592200')。tz(zone).format(); ...为什么这种行为?我也尝试过使用var IST = moment('1497680592200')。tz(“'”+ zone +“'”)。我收到了错误信息。 –

1

使用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' }); 

希望这将工作

+0

什么是IST时间 –

+0

new Date()。toLocaleString('en-US',{timeZone:'Asia/Calcutta'}) – Vineesh

+0

它正在工作.. –

相关问题