現地時間へのモーメントJs UTC


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時間に出てきます。私はヒューストンに住んでいるので、タイムゾーンが問題であることを知っています。リンクのコードをたどりましたが、現地時間を取得しているようです。何が悪いのですか?

回答:


237

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>


16
私にとってはうまくいきませんでした。時間は私のブラウザの時間よりも5時間進んでいます
ブライアンスクロギンズ

momentjsがローカルのタイムゾーンを認識している場合、それを取得する方法はありますか、またはこれを行うには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で保存してからクライアント側でフォーマットすると、作業が楽になることがわかりました。
ファンパブロウガス

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

このフィドルは私のコンピューターで次の結果を返します:2017年2月2日8:00 AM(UTC時間)2017年2月2日10:00 AM(現地時間)2017/02/02 )
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つの関数を作成しました。

要件:

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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.