时刻Js UTC到当地时间

时间:2015-09-12 15:43:45

标签: 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);

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

10 个答案:

答案 0 :(得分:146)

要将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>
&#13;
&#13;
&#13;

答案 1 :(得分:36)

试试这个:

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

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

答案 2 :(得分:12)

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

试试这个JsFiddle

答案 3 :(得分:9)

要将UTC转换为当地时间

 propertyChanging: (bindable, oldValue, newValue) =>
            {
                var control = bindable as ChartControl;
                var changingFrom = oldValue as float;
                var changingTo = newValue as float;

               //do something with ChartControl
                //o is the old value of the property
                //n is the new value

            });

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

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

答案 4 :(得分:1)

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

格式日期

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

答案 5 :(得分:1)

我已经编写了此Codesandbox,用于从UTC到本地时间以及从本地时间到UTC的往返。您可以更改时区和格式。享受吧!

代码和框(DEMO)上的完整示例:

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

答案 6 :(得分:1)

这是我使用 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(new Date(`${dateTime} ${time}`)).format('YYYY-MM-DD[T]HH:mm:ss');

答案 7 :(得分: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"

答案 8 :(得分:0)

这是对我有用的东西,它需要矩-tz和矩。

const guess = moment.utc(date).tz(moment.tz.guess());
const correctTimezone = guess.format()

答案 9 :(得分:0)

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

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