Ubah tanggal menjadi UTC menggunakan moment.js

95

Mungkin dan jawaban yang mudah untuk ini tetapi saya tidak dapat menemukan cara untuk mendapatkan moment.js untuk mengembalikan waktu tanggal UTC dalam milidetik. Inilah yang saya lakukan:

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

Tahu apa yang saya lakukan salah?

pengguna1956816
sumber

Jawaban:

101

Ini ditemukan di dokumentasi . Dengan perpustakaan seperti momen, saya mendorong Anda untuk membaca keseluruhan dokumentasi. Ini sangat penting.

Dengan asumsi teks masukan dimasukkan dalam istilah waktu lokal pengguna:

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

Jika pengguna diinstruksikan untuk memasukkan tanggal / waktu UTC, maka:

 var expires = moment.utc(date).valueOf();
Matt Johnson-Pint
sumber
22
Diedit - dihapus "dengan mudah". :)
Matt Johnson-Pint
6
Dan jika saya sudah memiliki waktu saat ini dengan zona waktu, bagaimana saya bisa mengubahnya menjadi UTC?
ア レ ッ ク ス
@Alexander -.utc()
Matt Johnson-Pint
2
Itu tidak berhasil. Itu hanya mengubah metode yang digunakan pada tanggal, bukan tanggal itu sendiri.
Colleen
2
@Colleen - ya, tetapi biasanya seseorang akan memanggil salah satu metode tersebut, seperti .format(), yang akan mengeluarkan nilai UTC. Itu tidak dapat mengubah nilai tanggal internal itu sendiri, karena a Datesudah melacak stempel waktu UTC. Selalu hanya metode yang dipanggil yang menentukan apakah akan mengeluarkan UTC atau waktu lokal. Dalam hal itu, momennya sama.
Matt Johnson-Pint
53

Saya menggunakan metode ini dan berhasil. ValueOf tidak bekerja untuk saya.

moment.utc(yourDate).format()
Bruno Quaresma
sumber
2
Ini berfungsi sesuai dokumentasi. mengubah waktu lokal menjadi UTC.
Kishor Pawar
1
Ada sesuatu yang mencurigakan di sini. Saya menggunakan moment.js ver. 2.17.1 dan jika 'yourdate' adalah untuk '2017-10-14T21: 00: 00Z' (en-us) maka potongan di atas mengembalikan hasil yang sama persis '2017-10-14T21: 00: 00Z' yang jelas bukan utc karena saya di gmt + 3. Hasil yang benar adalah '2017-10-15T00: 00: 00 + 03: 00' dan Anda mendapatkan ini melalui 'moment (yourDate) .format ()'.
XDS
14

Sejak: moment.js version 2.24.0

katakanlah Anda memiliki input tanggal lokal, ini adalah cara yang tepat untuk mengubah input dateTime atau Waktu Anda ke UTC :

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

atau jika Anda menentukan tanggal

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

Seperti yang Anda lihat, hasil keluaran akan dikembalikan dalam UTC:

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

Tetapi jika Anda melakukan ini seperti di bawah ini, itu tidak akan diubah menjadi UTC:

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

Anda hanya mengatur input Anda ke waktu utc, seolah-olah Anda menyebutkan bahwa myTime dalam UTC, .... outputnya adalah 9:00

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

adalah cara untuk pergi, sejak itu

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

bertingkah aneh ...

Florian S
sumber
1
Bisakah Anda menjelaskan perilaku aneh dari moment().utc(date).format(...)?
Freeman Lambda
2
Perilakunya tidak aneh, itu metode yang berbeda. Yang pertama moment.utc(date)adalah untuk mem - parsing file date. Yang kedua moment().utc(date)adalah untuk memanipulasi waktu saat ini ( moment()) dan dateparameter tidak berguna karena ini .utc()dalam kasus ini tidak mengharapkan parameter apa pun.
CodingHamster
2

Ini berhasil untuk saya. Orang lain mungkin menganggapnya berguna.

// date = 2020-08-31T00: 00: 00Z Saya berada di Denmark (zona waktu +2 jam)

moment.utc (moment (date) .utc ()). format () // mengembalikan 2020-08-30T22: 00: 00Z

Mikael
sumber
1

Jika semuanya gagal, cukup lakukan inisialisasi ulang dengan kebalikan dari offset lokal Anda.

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

timestamp.toISOString(); // This should give you the accurate UTC equivalent.
Timothy Perez
sumber
Ini tidak berhasil. Apa yang berhasil adalah mengatur keepOffsetparameter ke true, seperti dalam moment(timestamp).toISOString(true),
Chris Haines
1

di sini, saya meneruskan objek tanggal dan mengubahnya menjadi waktu UTC.

$.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);
Tak terkalahkan
sumber
1

Inilah jawabannya:

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
soohan
sumber
0

Baca dokumentasi moment.js di sini . Lihat contoh dan keluaran di bawah ini di mana saya mengonversi waktu GMT ke waktu lokal (zona saya adalah IST) dan kemudian saya mengonversi waktu lokal ke GMT.

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

Outputnya adalah

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
dineshydv.dll
sumber
-1

Tidakkah Anda memerlukan sesuatu untuk dibandingkan dan kemudian mengambil milidetik?

Contohnya:

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

Dengan itu Anda memiliki tanggal kedaluwarsa dalam UTC. Sekarang Anda bisa mendapatkan tanggal "sekarang" di UTC dan bandingkan:

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();
theRonny
sumber
The moment.valueOf()dan (new Date()).getTime()kedua pengembalian milidetik sejak 1 Januari 1970 UTC (itu standar)
Drenai