时刻Js UTC到当地时间

bri*_*ins 101 javascript date momentjs

我正在尝试将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);
Run Code Online (Sandbox Code Playgroud)

无论我做什么,时间总是在UTC时间出现.我住在休斯顿,所以我知道时区是个问题.我已经按照链接中的代码进行了操作,但似乎可以获得当地时间.我究竟做错了什么?

axo*_*xon 188

要将UTC时间转换为本地,您必须使用moment.local().

有关更多信息,请参阅文档

例:

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

console.log(date); // 2015-09-13 03:39:27

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

console.log(local); // 2015-09-13 09:39:27
Run Code Online (Sandbox Code Playgroud)

演示:

var date = moment.utc().format();
console.log(date, "- now in UTC"); 

var local = moment.utc(date).local().format();
console.log(local, "- UTC now to local"); 
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用,时间还比我的浏览时间提前5个小时,这是正确的 (9认同)
  • @brianScroggins,一定不要忘记`.utc(date)`。在第一部分中,行 `var local = ...` 没有它可能会产生误导。 (2认同)

小智 45

试试这个:

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

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

  • 这在我的例子中有效,我们将 UTC 时间保存在数据库中,并且仅在客户端上显示本地时间。谢谢。 (4认同)
  • 指定保存它的区域对我有效(此答案)。另外,如果您始终将内容保存为utc然后在客户端进行格式化,则会发现它使工作变得更轻松。 (3认同)

Bra*_*ang 18

将 UTC 转换为本地时间

let UTC = moment.utc()
let local = moment(UTC).local()
Run Code Online (Sandbox Code Playgroud)

或者你想直接获取当地时间

let local = moment()
Run Code Online (Sandbox Code Playgroud)

let UTC = moment.utc()
let local = moment(UTC).local()
Run Code Online (Sandbox Code Playgroud)
let local = moment()
Run Code Online (Sandbox Code Playgroud)


小智 14

let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");
Run Code Online (Sandbox Code Playgroud)

试试这个JsFiddle

  • 这很好用,但为什么 .local() 不返回相同的结果? (4认同)

Fun*_*LAM 6

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

格式化日期

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

格式化时间

  __formatTime: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('HH:mm');
  },
Run Code Online (Sandbox Code Playgroud)


Woo*_*DRN 6

这是我看到的老问题,但我并没有真正得到我想要的东西。我有一个 UTC 日期时间,其格式没有时区。所以我必须这样做:

let utcDatetime = '2021-05-31 10:20:00';
let localDatetime = moment(utcDatetime + '+00:00').local().format('YYYY-MM-DD HH:mm:ss');
Run Code Online (Sandbox Code Playgroud)