我正在尝试将UTC时间转换为本地时间。我一直在看这个例子:http://jsfiddle.net/FLhpq/4/light/。我似乎不能得到正确的本地输出。例如,如果在这里是上午10:30,那么不是10:30,而是15:30。这是我的代码:

var date = moment.utc().format('YYYY-MM-DD HH:mm:ss');

var localTime  = moment.utc(date).toDate();

localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');

console.log("moment: " + localTime);

无论我做什么,时间都是UTC时间。我住在休斯顿,所以我知道时区是个问题。我遵循了链接中的代码,但似乎可以得到当地时间。我做错了什么?


当前回答

试试这个:

let utcTime = "2017-02-02 08:00:13";

var local_date= moment.utc(utcTime).local().format('YYYY-MM-DD HH:mm:ss');

其他回答

试试这个:

let utcTime = "2017-02-02 08:00:13";

var local_date= moment.utc(utcTime).local().format('YYYY-MM-DD HH:mm:ss');

我为从UTC到本地时间以及从本地时间到UTC的往返编写了这个Codesandbox。您可以更改时区和格式。享受吧!

Codesandbox (DEMO)的完整示例:

https://codesandbox.io/s/momentjs-utc-to-local-roundtrip-foj57?file=/src/App.js

以下是我使用Intl api所做的:

let currentTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone; // For example: Australia/Sydney

这将返回一个时区名称。将此参数传递给下面的函数以获取时间

let dateTime = new Date(date).toLocaleDateString('en-US',{ timeZone: currentTimeZone, hour12: true});

let time = new Date(date).toLocaleTimeString('en-US',{ timeZone: currentTimeZone, hour12: true});

你也可以像这样用moment格式化时间:

moment(new Date(`${dateTime} ${time}`)).format('YYYY-MM-DD[T]HH:mm:ss');

注:请相应地更新日期格式。

日期格式

   __formatDate: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('D-MMM-Y');
   }

格式的时间

  __formatTime: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('HH:mm');
  },
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

试试这个JsFiddle