Moment.js kullanarak tarihi UTC'ye çevirin


95

Muhtemelen ve buna basit bir cevap, ancak moment.js'yi milisaniye cinsinden UTC tarih saatini döndürmek için almanın bir yolunu bulamıyorum. İşte yaptığım şey:

var date = $("#txt-date").val(),
    expires = moment.utc(date);

Neyi yanlış yaptığım hakkında bir fikrin var mı?

Yanıtlar:


101

Bu belgelerde bulunur . Kütüphane gibi bir anla, dokümantasyonun tamamını okumanızı tavsiye ediyorum. Bu gerçekten önemli.

Giriş metninin kullanıcıların yerel saatine göre girildiğini varsayarsak:

 var expires = moment(date).valueOf();

Kullanıcıya gerçekten bir UTC tarihi / saati girme talimatı verildiyse, o zaman:

 var expires = moment.utc(date).valueOf();

22
Düzenlendi - "kolayca" kaldırıldı. :)
Matt Johnson-Pint

6
Ve bir saat dilimine sahip anlık bir tarih-saatim varsa, bunu UTC'ye nasıl dönüştürebilirim?
ア レ ッ ク ス

@Alexander -.utc()
Matt Johnson-Pint

2
Bu işe yaramıyor. Bu sadece tarihte kullanılan yöntemleri değiştirir, tarihin kendisini değil.
Colleen

2
@Colleen - evet, ancak o zaman genellikle bu yöntemlerden birini çağırır, örneğin .format()UTC değerini yayar. Bu olamaz bir nedeni, iç tarih değerini kendisi değiştirmek Datezaten UTC zaman damgası izlenmesidir. UTC mi yoksa yerel saat mi yayımlanacağını belirleyen her zaman yalnızca çağrılan yöntemlerdir. Moment bu bakımdan aynıdır.
Matt Johnson-Pint

53

Bu yöntemi kullanıyorum ve işe yarıyor. ValueOf benim için çalışmıyor.

moment.utc(yourDate).format()

2
Bu, belgelere göre çalışır. yerel saati UTC'ye çevirir.
Kishor Pawar

1
Burada şüpheli bir şey var. Moment.js ver kullanıyorum. 2.17.1 ve "tarihiniz", "2017-10-14T21: 00: 00Z" (en-us) ise, yukarıdaki kod parçası "2017-10-14T21: 00: 00Z" ile aynı sonucu döndürür ki bu kesinlikle değildir utc gmt + 3 içindeyim. Doğru sonuç '2017-10-15T00: 00: 00 + 03: 00' olur ve bunu 'moment (yourDate) .format ()' üzerinden alırsınız.
XDS

14

İtibariyle: moment.js version 2.24.0

Diyelim ki yerel bir tarih girişiniz var, bu, dateTime veya Time girişinizi UTC'ye dönüştürmenin uygun yoludur :

var utcStart = new moment("09:00", "HH:mm").utc();

veya bir tarih belirtmeniz durumunda

var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();

Gördüğünüz gibi sonuç çıktısı UTC olarak döndürülecektir:

//You can call the format() that will return your UTC date in a string 
 utcStart.format(); 
//Result : 2019-06-24T13:00:00 

Aşağıda olarak bunu yaparsanız Ama, olmaz UTC dönüştürmek:

var myTime = new moment.utc("09:00", "HH:mm"); 

Girişinizi yalnızca utc saatine ayarlıyorsunuz, sanki myTime'ın UTC'de olduğundan bahsediyorsunuz .... çıktı 9:00 olacak


3
moment.utc(date).format(...); 

çünkü gitmenin yolu

moment().utc(date).format(...);

tuhaf davranıyor ...


1
Garip davranışını biraz açıklar moment().utc(date).format(...)mısınız?
Freeman Lambda

2
Davranış tuhaf değil, bunlar farklı yöntemler. İlk moment.utc(date)içindir ayrıştırmadate . İkinci moment().utc(date)içindir manipüle geçerli saati ( moment()) ve datebu yana parametre işe yaramaz .utc()bu durumda herhangi bir params beklemiyor.
CodingHamster

2

Bu benim için çalıştı. Diğerleri onu faydalı bulabilir.

// tarih = 2020-08-31T00: 00: 00Z Danimarka'da bulunuyorum (saat dilimi +2 saat)

moment.utc (moment (tarih) .utc ()). format () // 2020-08-30T22: 00: 00Z döndürür


1

Her şey başarısız olursa, yerel ofsetinizin tersi ile yeniden başlatın.

var timestamp = new Date();
var inverseOffset = moment(timestamp).utcOffset() * -1;
timestamp = moment().utcOffset( inverseOffset  );

timestamp.toISOString(); // This should give you the accurate UTC equivalent.

Bu çalışmıyor. Ne iş kuruyor yaptığı keepOffsetgibi, true parametresini moment(timestamp).toISOString(true),
Chris Haines

1

burada, tarih nesnesini geçiyorum ve UTC saatine dönüştürüyorum.

$.fn.convertTimeToUTC = function (convertTime) {
   if($(this).isObject(convertTime)) {
        return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss");
    }
};
// Returns if a value is an object
$.fn.isObject =  function(value) {
    return value && typeof value === 'object';
};


//you can call it as below
$(this).convertTimeToUTC(date);

1

Cevap bu olacak:

moment.utc(moment(localdate)).format()
localdate = '2020-01-01 12:00:00'

moment(localdate)
//Moment<2020-01-01T12:00:00+08:00>

moment.utc(moment(localdate)).format()
//2020-01-01T04:00:00Z

0

Moment.js'nin bu belgelerini buradan okuyun . GMT saatini yerel saate dönüştürdüğüm (bölgem IST'dir) ve ardından yerel saati GMT'ye dönüştürdüğüm aşağıdaki örneğe ve çıktıya bakın.

// convert GMT to local time
console.log('Server time:' + data[i].locationServerTime)
let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to local time:' + data[i].locationServerTime)

// convert local time to GMT
console.log('local time:' + data[i].locationServerTime)
let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to server time:' + data[i].locationServerTime)

Çıktı

Server time:2019-12-19 09:28:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to local time:2019-12-19 14:58:13
local time:2019-12-19 14:58:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to server time:2019-12-19 09:28:13

-1

Karşılaştırmak ve sonra milisaniyeleri geri almak için bir şeye ihtiyacınız yok mu?

Örneğin:

let enteredDate = $("#txt-date").val(); // get the date entered in the input
let expires = moment.utc(enteredDate); // convert it into UTC

Bununla birlikte, UTC olarak son kullanma tarihine sahip olursunuz. Artık "hemen şimdi" tarihini UTC olarak alabilir ve aşağıdakileri karşılaştırabilirsiniz:

var rightNowUTC = moment.utc(); // get this moment in UTC based on browser
let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff
let remainingTimeInMls = duration.asMilliseconds();

moment.valueOf()Ve (new Date()).getTime()1 Ocak 1970 UTC (bir standarttır) beri de dönüp milisaniye
Drenai
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.