Moms Js UTC - Yerel Zaman


145

UTC saatini yerel saate dönüştürmeye çalışıyorum. Bu örneği şu bağlantıdan takip ediyorum: http://jsfiddle.net/FLhpq/4/light/ . Doğru yerel çıktıyı alamıyorum. Örneğin, burada 10: 30 am, 10:30 hasta almak yerine 15: 30 olsun. İşte benim kod:

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);

Ne yaparsam yapayım zaman hep UTC saatinde çıkıyor. Houston'da yaşıyorum bu yüzden zaman dilimi biliyorum. Ben bağlantıdaki kodu takip ettik ama yerel saati almak gibi görünebilir. Neyi yanlış yapıyorum?

Yanıtlar:


239

UTC saatini Yerel'e dönüştürmek için kullanmanız gerekir moment.local().

Daha fazla bilgi için dokümanlara bakın

Misal:

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

Demo:

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
benim için çalışmadı, zaman hala tarayıcılarımın saatinden 5 saat ileridedir
brian Scroggins

momentjs yerel saat diliminin farkındaysa, onu almanın bir yolu var mı veya bunu yapmak için moment.tz.guess () gerekli mi?
jEremyB

@jEremyB moment().format('Z')ve moment().format('ZZ')size yardımcı olabilir. Ayrıca, (new Date()).getTimezoneOffset()belki de sizin için yeterli olabilir bir göz atın
axon

@brianScroggins, unutmadığınızdan emin olun .utc(date). İlk bölümde, var local = ...ona sahip olmayan çizgi yanıltıcı olabilir.
Jocelyn

62

Bunu dene:

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

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

3
Kaydedildiği bölgeyi belirlemek benim için çalıştı (bu cevap). Ayrıca, her zaman utc'de bir şeyler kaydedip istemci tarafında biçimlendirirseniz hayatı kolaylaştırır.
Juan Pablo Ugas

1
Bu benim db bizim UTC zaman tasarrufu ve sadece yerel saat istemcide görüntülemek benim durumumda çalıştı. Teşekkürler.
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");

Bu JsFiddle'ı deneyin


2
Bu harika çalışıyor ama neden .local () aynı sonucu vermiyor?
Steve

bu keman bilgisayarımda aşağıdaki sonucu döndürür: 02/02/2017 08:00 (UTC Saati) 02/02/2017 10:00 (Yerel Zaman) 02/02/2017 9:00 AM (Yerel Zaman Başka bir yol) )
Steve

3

Not: Lütfen tarih biçimini uygun şekilde güncelleyin.

Tarihi Biçimlendir

   __formatDate: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('D-MMM-Y');
   }

Biçim Zamanı

  __formatTime: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('HH:mm');
  },

3

UTC'yi yerel saate dönüştürmek için

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

Veya doğrudan yerel saati almak istersiniz

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

Tüm zaman dilimlerini yerel saate dönüştüren bir işlev oluşturdum.

Gereksinimler:

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"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.