时刻 Js UTC 到本地时间

IT技术 javascript date momentjs
2021-02-27 23:07:53

我正在尝试将 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 时间出现。我住在休斯顿,所以我知道时区是问题所在。我已经按照链接中的代码进行操作,但似乎可以获取本地时间。我究竟做错了什么?

6个回答

要将 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

演示:

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"); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

对我不起作用,时间仍然比我的浏览器时间早 5 小时,这是正确的
2021-04-15 23:07:53
@brianScroggins,一定不要忘记.utc(date)在第一部分,var local = ...没有它的行可能会产生误导。
2021-04-15 23:07:53
@jEremyB,moment().format('Z')并且moment().format('ZZ')可以帮助你。另外,看看(new Date()).getTimezoneOffset()也许这对你来说就足够了
2021-04-20 23:07:53
我在 nodeJs 环境中使用了 moment,我必须在 environment-vars 中设置时区才能正常工作:TZ='Europe/Vienna' stackoverflow.com/a/9849524/2560683
2021-05-13 23:07:53
如果 momentjs 知道本地时区,有没有办法检索它或者是否需要 moment.tz.guess() 来做到这一点?
2021-05-14 23:07:53

试试这个:

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

var local_date= moment.utc(utcTime ).local().format('YYYY-MM-DD HH:mm:ss');
指定保存它的区域对我有用(这个答案)。此外,发现如果您总是以 utc 格式保存内容,然后在客户端进行格式化,它会使生活更轻松。
2021-04-16 23:07:53
这在我的情况下有效,我们在我们的数据库中以 UTC 格式保存时间,并且只在客户端上显示本地时间。谢谢。
2021-04-21 23:07:53
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

试试这个JsFiddle

这个小提琴在我的电脑上返回以下结果:02/02/2017 8:00 AM(UTC时间)02/02/2017 10:00 AM(当地时间)02/02/2017 9:00 AM(当地时间另一种方式) )
2021-04-16 23:07:53
这很好用,但为什么 .local() 不返回相同的结果?
2021-04-21 23:07:53

将 UTC 转换为本地时间

let UTC = moment.utc()
let local = moment(UTC).local()

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

let local = moment()

var UTC = moment.utc()
console.log(UTC.format()); // UTC time

var cLocal = UTC.local()
console.log(cLocal.format()); // Convert UTC time

var local = moment();
console.log(local.format()); // Local time
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

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

格式日期

   __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');
  },