Peringatan penghentian dalam Moment.js - Tidak dalam format ISO yang dikenali


176

Saya mendapat peringatan bahwa nilai yang diberikan untuk saat ini tidak dalam format ISO yang diakui. Saya mengubah variabel saya hari ini dengan fungsi momen dan tetap tidak berfungsi.

Inilah kesalahan peringatan:

Peringatan penghentian: nilai yang diberikan tidak dalam format ISO yang dikenali. konstruksi saat jatuh kembali ke js Date (), yang tidak dapat diandalkan di semua browser dan versi. Format tanggal non ISO tidak disarankan dan akan dihapus dalam rilis besar mendatang. Silakan merujuk ke http://momentjs.com/guides/#/warnings/js-date/ untuk info lebih lanjut. Argumen: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object Object]

var entryDate = new Date();
var currentDate = entryDate.getDate();

function between(x, min, max) {
  return x.valueOf() >= min.valueOf() && x < max.valueOf();
}

$('#custom1').change(function () {
  if ($('#custom1 :selected').val() == 'AU') {
    var keyword = '';

    var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');
    var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');
    var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');
    var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');
    var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
    var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
    var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
  } else if ($('#custom1 :selected').val() == 'NZ') {
    var aus1_s = moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
    var aus2_s = moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
    var aus3_s = moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
    var aus4_s = moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
    var aus5_s = moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
    var aus6_s = moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
    var aus6_e = moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
  } else {
    $('#entryEquals').val('');
    return false;
  }

  var today = moment();

  switch (true) {
    case between(today, aus1_s, aus2_s):
      keyword = 'RElYT04=';
      break;

    case between(today, aus2_s, aus3_s):
      keyword = 'QlJJREU=';
      break;

    case between(today, aus3_s, aus4_s):
      keyword = 'U1lETkVZ';
      break;

    case between(today, aus4_s, aus5_s):
      keyword = 'R1JPT00=';
      break;

    case between(today, aus5_s, aus6_s):
      keyword = 'V0VERElORw==';
      break;

    case between(today, aus6_s, aus6_e):
      keyword = 'VExD';
      break;

    default:
      $('#entryEquals').val('');
      break;
  }

  $('#entryEquals').val(keyword);
});

1
Saya pikir peringatan mengacu '2016-9-26 19:30'dan seperti tidak menjadi format ISO diakui
Jaromanda X

apa kesalahan pada format? jadi apakah saya perlu menambahkan 0?
Jemai

1
Anda dapat melakukannya moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');sesuai dengan dokumentasi ... ini akan menerima 1 atau 2 digit bulan dan hari, 1 atau 2 digit jam dalam format 24 jam
Jaromanda X

2
Kesalahannya adalah bahwa format yang Anda berikan bukan format ISO yang dikenali ... baik menyediakan format ISO yang dikenali, atau berikan string yang "memberi petunjuk" pada format yang diharapkan
Jaromanda X

Oke terima kasih, bagaimana dengan yang ini saya dapat menambahkan format ini juga? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai

Jawaban:


180

Lihat semua dokumentasi mereka yang luar biasa!

Di sinilah mereka membahas Pesan Peringatan .

String + Format

Peringatan: Dukungan browser untuk string parsing tidak konsisten. Karena tidak ada spesifikasi format yang harus didukung, apa yang berfungsi di beberapa browser tidak akan berfungsi di browser lain.

Untuk hasil yang konsisten mem-parsing apa pun selain string ISO 8601, Anda harus menggunakan String + Format .

moment("12-25-1995", "MM-DD-YYYY");

String + Format (berbagai format)

Jika Anda memiliki lebih dari satu format, lihat String + Format (dengan an 's).

Jika Anda tidak tahu format persis dari string input, tetapi tahu itu bisa salah satu dari banyak, Anda bisa menggunakan array format.

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

Silakan cek dokumentasi untuk sesuatu yang lebih spesifik.

Zona waktu

Checkout Parsing in Zone , dokumentasi yang setara untuk zona waktu.

Konstruktor moment.tz mengambil semua argumen yang sama dengan konstruktor momen, tetapi menggunakan argumen terakhir sebagai pengidentifikasi zona waktu.

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");

EDIT

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
    var region = 'Australia/Sydney';

    aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);              
    aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);              
    aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);                  
    aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);                 
    aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
    aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
    aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
    var region = 'Pacific/Auckland';

    aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
    aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
    aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
    aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
    aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
    aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
    aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...

89
Daripada menyalin dan menempelkan dokumentasi, berikan jawaban yang sebenarnya.
Rebs

2
inilah yang membantu saya menempatkan format ke "input" - moment ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Demodave

2
@Rebs Saya pikir saya menambahkan banyak dokumentasi karena solusi umum tidak lurus ke depan. Jelas solusi spesifik untuk Jemai seharusnya ada dalam jawaban dan saya telah menambahkannya sejak (terima kasih kepada Anda!) Tetapi yang pertama adalah mengapa ada begitu banyak dokumentasi di sini.
christo8989

Terima kasih tetapi bagaimana jika Anda hanya ingin kencan sederhana tanpa kerangka kerja yang berat ini, mungkin kita bisa mengabaikan peringatan ini?
Webwoman

ini membantu saya -> saat ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Cesar Rodriguez T

50

Melakukan ini bekerja untuk saya:

moment(new Date("27/04/2016")).format

5
Ini adalah pekerjaan paling sederhana untuk menghindari polusi konsol
Josey

2
Saya tidak akan menyarankan pendekatan ini untuk siapa pun yang harus berurusan dengan dukungan IE untuk tingkat apa pun. Hasilnya sangat rapuh khususnya pada IE 11.
Ajm113

1
Ini adalah jawaban yang paling sederhana dan akurat. Terima kasih itu membantu saya.
Tahir Afridi

15

Saya mengalami kesalahan ini karena saya mencoba memberikan tanggal dari localStorage. Melewati tanggal menjadi Dateobjek baru , dan kemudian memanggil .toISOString () melakukan trik untuk saya:

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

Ini menekan semua peringatan di konsol.


Ini akan menekan peringatan tetapi downside adalah jika Anda spesifik untuk zona waktu, maka saya tidak akan menyarankan ini: karena itu akan mengubah tanggal yang diberikan ke UTC seperti yang kita katakan '.toISOString ()'. Coba "moment (Date baru (" 27/04/2016 ")). Format" seperti yang dinyatakan dari jawaban lain - yang akan menjaga waktu dalam waktu lokal ..
whoami

15

gunakan momen dalam fungsi Anda seperti ini

 moment(new Date(date)).format('MM/DD/YYYY')

Ini adalah jawaban singkat yang Anda cari jika Anda hanya ingin menyingkirkan "peringatan yang telah didepresiasi"
VictorC

6

Jawaban ini adalah untuk memberikan pemahaman yang lebih baik tentang peringatan ini

Peringatan penghentian disebabkan ketika Anda menggunakan momen untuk membuat objek waktu var today = moment();,.

Jika peringatan ini tidak masalah bagi Anda, maka saya memiliki metode yang lebih sederhana.

Jangan gunakan dateobjek dari jspenggunaan momentsebagai gantinya. Misalnya gunakan moment()untuk mendapatkan tanggal saat ini.

Atau mengonversi jsobjek momenttanggal ke tanggal. Anda bisa melakukannya dengan menentukan format jsobjek tanggal Anda .

yaitu, moment("js date", "js date format");

misalnya:

moment("2014 04 25", "YYYY MM DD");

(TETAPI ANDA BISA HANYA MENGGUNAKAN METODE INI SAMPAI ITU TIDAK DIHARAPKAN, ini mungkin disusutkan dari momentmasa depan)


6
Serius! pertanyaan tentang cara menghapus peringatan penghentian ini! tidak bertanya bagaimana cara menggunakan penghinaan ini! juga, ini adalah "ini akan dihapus di masa depan" tidak "ini dapat disusutkan dari saat di masa depan" itu sudah usang!
Al-Mothafar

@ Al-Mothafar, saya punya sedikit keraguan, mengapa Anda melampaui ketika ifkondisi gagal. Anda harus keluar dari jawaban tidak melanjutkan.
Saahithyan Vigneswaran

2
Terima kasih, ini adalah jawaban yang benar-benar menunjukkan kepada saya apa yang dapat saya ketahui di sini.
DigitalDesignDj

3

Kamu bisa memakai

moment(date,"currentFormat").format("requiredFormat");

Ini harus digunakan ketika tanggal bukan Format ISO karena ini akan memberi tahu saat apa format kita saat ini.


1
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
leopal

@leopal membuat beberapa perubahan!
BeaST 30

2

Parsing string dengan moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);

Ini membantu saya menghilangkan peringatan penghentian ketika saya mencoba menggunakan format unix untuk mendapatkan nomor minggu.
curious.netter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.