【问题标题】:How to convert time in milli seconds to different local times using timezone如何使用时区将时间以毫秒为单位转换为不同的本地时间
【发布时间】:2017-06-17 06:49:26
【问题描述】:

我需要使用 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 时间戳转换为不同的本地时间?

【问题讨论】:

  • 我很确定您需要将时间戳转换为日期字符串。来自文档 timezoneJS.Date(dt_str_tz, [tz])。因此,请尝试更改 123412341234 -> 10/31/2008 或您想要的任何日期。
  • 你的时区列表有点奇怪,顺便说一句。您有纽约的 PDT,选择古巴的 CDT 等。如果您正在寻找美国的主要时区,通常选择的列表(从东到西)是:America/New_YorkAmerica/Chicago、@987654326 @、America/PhoenixAmerica/Los_AngelesAmerica/AnchoragePacific/Honolulu

标签: javascript node.js datetime timezone momentjs


【解决方案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();

【讨论】:

  • 太好了! :)
  • 将代码更改为 var zone='Asia/Kolkata' 时,我的日期时间不正确; var IST = moment('1497680592200').tz(zone).format(); ...为什么这种行为?我也试过 var IST = moment('1497680592200').tz("'"+zone+"'").format();我收到错误消息。
  • @MattJohnson 他们可以,时刻会以任何一种方式解析它们。
  • @AbdulManaf 你的错误是什么?而且您不必缓冲连接空字符串。
  • @Kano - 如果将其作为字符串传递,则还需要将 x 作为参数传递。否则您将收到弃用警告,因为您无法保证回退到 Date 对象的解析器将正常工作。
【解决方案2】:

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

希望这会奏效

【讨论】:

  • IST 时间怎么样
  • new Date().toLocaleString('en-US', { timeZone: 'Asia/Calcutta' })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2022-11-27
  • 2018-03-07
相关资源
最近更新 更多