簡體   English   中英

時刻 Js UTC 到本地時間

[英]Moment Js UTC to Local Time

我正在嘗試將 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 時間出現。 我住在休斯頓,所以我知道時區是問題所在。 我已按照鏈接中的代碼進行操作,但似乎可以獲取當地時間。 我究竟做錯了什么?

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

嘗試這個:

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.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

試試這個JsFiddle

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

這是我看到的老問題,但我並沒有真正得到我想要的東西。 我有一個沒有時區格式的 UTC 日期時間。 所以我不得不這樣做:

let utcDatetime = '2021-05-31 10:20:00';
let localDatetime = moment(utcDatetime + '+00:00').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(new Date(`${dateTime} ${time}`)).format('YYYY-MM-DD[T]HH:mm:ss');

我創建了一個將所有時區轉換為本地時間的函數。

要求:

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"

這對我有用,但它需要矩 tz 和矩。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM