从当地时间到当地时间


145

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

Answers:


238

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

有关更多信息,请参阅docs

例:

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>


16
不适用于我,时间仍然比我的花时间还早5个小时,这是正确的
brian Scroggins 2015年

如果moment.js知道本地时区,是否有办法检索它或是否需要moment.tz.guess()?
jEremyB

@jEremyB,moment().format('Z')并且moment().format('ZZ')可以帮助你。另外,看看(new Date()).getTimezoneOffset()是否足够满足您的要求
轴突

@brianScroggins,请确保不要忘记.utc(date)。在第一部分中,var local = ...没有它的生产线可能会产生误导。
乔斯林

62

试试这个:

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

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

3
指定保存它的区域对我有效(此答案)。另外,如果您始终将内容保存为utc然后在客户端进行格式化,则会发现它使工作变得更轻松。
Juan Pablo Ugas

1
在我的情况下,这是有效的,因为我们在数据库中以UTC节省时间,并且仅在客户端上显示本地时间。谢谢。
Alex Ehlert

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

试试这个JsFiddle


2
这很好用,但是为什么.local()不返回相同结果?
史蒂夫(Steve)

此提琴在我的计算机上返回以下结果:02/02/2017 8:00 AM(UTC时间)02/02/2017 10:00 AM(本地时间)02/02/2017 9:00 AM(本地时间另一种方式) )
史蒂夫(Steve

3

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

格式化日期

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

3

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


0

我创建了一个函数,将所有时区转换为本地时间。

要求:

1. npm i moment-timezone

function utcToLocal(utcdateTime, tz) {
    var zone = moment.tz(tz).format("Z") // Actual zone value e:g +5:30
    var zoneValue = zone.replace(/[^0-9: ]/g, "") // Zone value without + - chars
    var operator = zone && zone.split("") && zone.split("")[0] === "-" ? "-" : "+" // operator for addition subtraction
    var localDateTime
    var hours = zoneValue.split(":")[0]
    var minutes = zoneValue.split(":")[1]
    if (operator === "-") {
        localDateTime = moment(utcdateTime).subtract(hours, "hours").subtract(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else if (operator) {
        localDateTime = moment(utcdateTime).add(hours, "hours").add(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else {
        localDateTime = "Invalid Timezone Operator"
    }
    return localDateTime
}

utcToLocal("2019-11-14 07:15:37", "Asia/Kolkata")

//Returns "2019-11-14 12:45:37"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.