<p>moment.utc (string) mengurai ISO8601 sebagai waktu lokal ketika zona waktu tidak ada</p>

Dibuat pada 12 Apr 2012  ·  24Komentar  ·  Sumber: moment/moment

Komentar yang paling membantu

Saya harus menambahkan ekspresi kebingungan seputar fungsionalitas UTC. Harapan paling intuitif dari moment.utc () adalah ia akan mengembalikan objek Momen yang mewakili tanggal / waktu sekarang dalam waktu UTC. Tetapi menurut diskusi ini bukan itu masalahnya dan itu hanya mengatur bendera. Masih belum jelas apa fungsi bendera itu. Semua ini tidak disebutkan dalam dokumentasi, yang membuatnya sangat tidak memadai. Harap tambahkan klarifikasi topik ini dengan contoh-contoh pada backlog Anda. Terima kasih.

Semua 24 komentar

moment.utc (string) mengurai ISO8601 sebagai waktu lokal ketika zona waktu tidak ada

ini adalah bagaimana ISO8601 mengatakan ... dan EcmaScript 6

Saya pikir itu berlaku untuk moment(string) cukup baik, tetapi ketika menggunakan moment.utc(string) , saya pikir implikasinya adalah Anda ingin itu diurai sebagai UTC.

moment('2010-10-20T08:40'); // should parse to local time
moment.utc('2010-10-20T08:40'); // should parse to utc time

Saya mengalami masalah, saya pikir terkait dengan ini:

Saya mencoba mengonversi tanggal ini: 12-04-2012 (DD-MM-YYYY, dalam UTC) ke stempel waktu Unix-nya.
Saya sedang melakukan ini:

var date = '12-04-2012';
var mm = moment().utc( date, "DD-MM-YYYY" );
console.log( mm.valueOf() );

Ini menghasilkan stempel waktu yang salah: 1334670827391 .
Jika saya mencoba:

console.log( mm.format('DD-MM-YYYY') );

Ini outpus: 17-04-2012

a538306 memperbaiki ini. Akan keluar di 1.6.0

Saya masih melihat masalah ini di versi terbaru ..

Saya meneruskan: moment.utc ('2012-12-14T00: 29: 40.276Z') dan mendapatkan: {_d: Kam 13 Des 2012 18:29:40 GMT-0600 (Waktu Standar Tengah), _isUTC: true (Kam 13 Des 2012 18:29:40 GMT-0600 (Waktu Standar Tengah)) .. Ini tidak menggunakan waktu utc tetapi zona waktu lokal saya.

Inilah yang saya dapatkan dengan 1.7.2 .

moment.utc('2012-12-14T00:29:40.276Z').format(); // "2012-12-14T00:29:40+00:00"

Inilah yang terjadi pada saya (versi terbaru) ketika saya menulis ke konsol di chrome:

console.log (moment.utc ('2012-12-14T00: 29: 40.276Z'));
console.log (moment.utc ('2012-12-14T00: 29: 40.276Z'). format ());
console.log (moment.utc ('2012-12-14T00: 29: 40.276Z'). toDate ());

H {_d: Kam 13 Des 2012 18:29:40 GMT-0600 (Waktu Standar Tengah), _isUTC: true, _a: Array [8], _lang: false, clone: ​​function…}

2012-12-14T00: 29: 40 + 00: 00

Kam 13 Des 2012 18:29:40 GMT-0600 (Waktu Standar Tengah)

Bukankah seharusnya itu membuat tanggal baru di utc (tanpa zona waktu)? Juga console.log pertama menunjukkan objek momen dengan zona waktu cst dan bukan waktu utc.

Thu Dec 13 2012 18:29:40 GMT-0600 sebenarnya waktu yang sama persis dengan 2012-12-14T00:29:40.276Z . Mereka hanyalah cara berbeda untuk menampilkan waktu yang sama. Jika mau, Anda dapat melihatnya dengan melakukan hal berikut.

console.log(moment.utc('2012-12-14T00:29:40.276Z').toDate().toString());
// Thu Dec 13 2012 16:29:40 GMT-0800 (PST)
console.log(moment.utc('2012-12-14T00:29:40.276Z').toDate().toUTCString());
// Fri, 14 Dec 2012 00:29:40 GMT

JS asli Date tidak memiliki mode utc vs lokal, ia hanya memiliki aksesor seperti getUTCHours dan getHours .

Moment.js mengabstraksi metode getUTC* vs get* dengan ide mode utc dan mode lokal. Jika momen dalam mode utc, itu menggunakan metode getUTC* . Jika dalam mode lokal, ia menggunakan metode get* .

Terimakasih atas klarifikasinya.

Saya mengharapkan dan berpikir bahwa sinze standar iso menyatakan bahwa Z berarti tidak ada zona waktu yang akan default ke utc. Jadi jika Anda melakukan moment.utc ('2012-12-14T00: 29: 40.276Z') atau moment ('2012-12-14T00: 29: 40.276Z'), keduanya akan diperlakukan sebagai utc dan flag utc akan disetel ke true.

PS, maaf sudah mengganggumu:. Saya membuat diskusi baru untuk pertanyaan yang berbeda: s

Tidak masalah.

Alasan kami tidak menyetel flag isUTC dengan moment() dan moment.utc() adalah karena meskipun Anda mungkin mengurai string UTC + 0, Anda mungkin ingin menampilkan momen di zona waktu pengguna.

Ini adalah kasus penggunaan yang cukup umum, karena praktik yang baik adalah menyimpan waktu sebagai string ISO8601 UTC + 0 di backend dan menampilkannya di frontend dalam zona waktu pengguna.

Terima kasih, saya harap diskusi ini juga bermanfaat bagi orang lain.

Ketika saya menjalankan console.log (moment.utc ()), ia melaporkan "Fri Jan 18 2013 16:25:32 GMT-0800 (UTC)" Namun, itu adalah waktu Pasifik lokal, BUKAN waktu UTC saat ini. Karena secara eksplisit mengatakan (UTC) ketika saya mencatatnya, saya berasumsi bahwa ia berpikir "16:25:32" adalah waktu UTC, tetapi ini memang waktu pasifik lokal ...

Selain itu, saya berasumsi moment.utc (). ValueOf () mengembalikan jumlah milidetik dalam UTC sejak epoch, yang tampaknya salah. Pernahkah Anda melihat perilaku ini?

console.log (momen ())
H {_d: Jum 18 Jan 2013 16:51:20 GMT-0800 (UTC), _isUTC: false, _a: null, _lang: false}
console.log (moment.utc ())
H {_d: Jum 18 Jan 2013 16:51:20 GMT-0800 (UTC), _isUTC: true, _a: null, _lang: false}

Tampaknya yang dilakukannya hanyalah membalik panji _isUTC. : P Tampaknya mengembalikan waktu lokal terlepas dari apakah saya menetapkan .utc () atau tidak.

Ya, .utc dan .local hanya membalik tanda .isUTC yang digunakan di semua getter dan setter.

Karena asli Date.toString ditampilkan dalam waktu lokal, Anda melihat representasi yang sama di kedua contoh.

Namun, .format menggunakan flag .isUTC , jadi memformat momen dengan flag isUTC disetel ke true akan memformat seperti yang diharapkan.

Lihat perbedaan di bawah ini tentang Date.prototype.toString , Date.prototype.toUTCString , dan moment.fn.format .

moment().toDate().toString();     // "Wed Jan 23 2013 09:48:54 GMT-0800 (PST)"
moment.utc().toDate().toString(); // "Wed Jan 23 2013 09:48:54 GMT-0800 (PST)"
moment().toDate().toUTCString();     // "Wed, 23 Jan 2013 17:48:54 GMT"
moment.utc().toDate().toUTCString(); // "Wed, 23 Jan 2013 17:48:54 GMT"
moment().format();     // "2013-01-23T09:48:54-08:00"
moment.utc().format(); // "2013-01-23T17:48:54+00:00"

Masalah yang sama disini:
momen (). valueOf () dan momen (). utc (). valueOf ()
mengembalikan nilai yang sama! :kecewa:

Jadi untuk mendapatkan milidetik utc saya perlu:

moment().valueOf() - (moment().utcOffset() * 60 * 1000)

@rubenspgcavalcante - Saya tidak yakin apa yang Anda tanyakan. Keduanya _supposed_ untuk mengembalikan nilai yang sama, yang keduanya dalam milidetik sejak masa unix.

Cuplikan yang Anda tulis sebenarnya mengembalikan momen waktu yang berbeda.

Saya mengalami masalah serupa di mana bendera UTC disetel ke true tetapi ketika saya format cal (); Ini mengembalikan waktu setempat. Ini screenshotnya.

screen shot 2016-07-10 at 8 50 15 am

Baris setelah objek adalah console.log dari var setelah saya memanggil format (); di atasnya.

Apakah saya melakukan sesuatu yang salah?

@ james-hoegerl sepertinya objek tanggal internal adalah 5 Juli 2016 jam 19:00 pusat. Tambahkan lima jam untuk itu untuk mendapatkan UTC, dan sekarang 6 Juli, yang tampaknya merupakan penebangan, jadi singkatnya, saya tidak melihat ada yang salah.
Sepertinya Anda menggunakan kalender penuh. Itu melakukan beberapa ekstensi / penambalan monyet saat yang dapat menyebabkan perilaku yang tidak biasa.

Ok mungkin saya hanya bingung tentang uct. Saya pikir saya akan mendapatkan "2016-05-07 07:00:00" kemudian saya bisa menyimpannya di DB dan kemudian mendapatkan waktu lokal untuk setiap komputer pengguna akhir melalui momen.

Jadi, pertama-tama saya akan menganggap yang Anda maksud 6016-07-05 (5 Juli, bukan 7 Mei). Waktu setempat Anda adalah 5 Juli pukul 19:00. Disesuaikan untuk Siang Hari Tengah AS, kami menambahkan lima jam. Itu menghasilkan 6 Juli di tengah malam.

Jika Anda bermaksud mendapatkan tanggal 5 Juli, maka menurut saya yang sebenarnya Anda inginkan adalah waktu lokal, bukan UTC. Anda bisa memanggil .local () sekarang juga untuk mengembalikannya ke waktu lokal.

Ini mungkin berguna bagi Anda: https://maggiepint.com/2016/05/14/moment-js-shows-the-wrong-date/

Terima kasih banyak atas bantuan Anda @maggiepint. Ya, komentar saya sebelumnya, maksud saya 7-5. Maaf tentang itu saya menulis komentar itu dengan tergesa-gesa di telepon saya di tepi kolam renang akhir pekan ini. Saya melihat di mana pemikiran saya telah mundur sekarang. fullcalendar bekerja pada semua objek momen yang dikategorikan dengan waktu ambigu jadi saya pikir saya hanya mengalami kesalahpahaman di sana dan perlu melakukan beberapa langkah selanjutnya. Sekali lagi terima kasih atas waktu Anda @maggiepint

Hai, Untuk mengonversi UTC ke waktu pengguna, apakah kita perlu memberikan format.
misalnya: let utcTime = moment ({hour: 10, minute: 20) .format ('YYYY-MM-DD HH: mm: ss');
let stillUtc = moment.utc (utcTime) .toDate ();
biarkan localTime = momen (stillUtc) .local ();
Sekarang saya bisa mendapatkan localTIme. Tetapi jika saya menghapus format saya masih bisa format UTC. di sini 10:20 adalah zona waktu UTC yang datang dari backend. Saya ingin menunjukkan ini kepada pengguna di zona waktu pengguna.

Tolong bantu aku.

Masalah yang sama disini:
momen (). valueOf () dan momen (). utc (). valueOf ()
mengembalikan nilai yang sama! 😞
Jadi untuk mendapatkan milidetik utc saya perlu:
momen (). valueOf () - (momen (). utcOffset () * 60 * 1000)

@rubenspgcavalcante - Saya tidak yakin apa yang Anda tanyakan. Keduanya diharapkan mengembalikan nilai yang sama, keduanya dalam milidetik sejak zaman unix.

@ mj1856 Saya tidak mengerti bagaimana moment (). valueOf () dan moment (). utc (). valueOf () seharusnya mengembalikan nilai yang sama ??

Saya harus menambahkan ekspresi kebingungan seputar fungsionalitas UTC. Harapan paling intuitif dari moment.utc () adalah ia akan mengembalikan objek Momen yang mewakili tanggal / waktu sekarang dalam waktu UTC. Tetapi menurut diskusi ini bukan itu masalahnya dan itu hanya mengatur bendera. Masih belum jelas apa fungsi bendera itu. Semua ini tidak disebutkan dalam dokumentasi, yang membuatnya sangat tidak memadai. Harap tambahkan klarifikasi topik ini dengan contoh-contoh pada backlog Anda. Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat