Moment.js'de kullanımdan kaldırma uyarısı - Tanınan bir ISO biçiminde değil


176

Şu ana kadar sağlanan bir değerin tanınmış bir ISO biçiminde olmadığına dair bir uyarı alıyorum. Değişkenimi bugün moment fonksiyonu ile değiştirdim ve hala çalışmıyor.

Uyarı hatası şöyledir:

Kullanımdan kaldırma uyarısı: sağlanan değer, tanınan bir ISO biçiminde değil. an yapı tüm tarayıcılarda ve sürümlerde güvenilir olmayan js Date () 'e geri döner. ISO dışı tarih biçimleri önerilmez ve yaklaşan büyük sürümde kaldırılacaktır. Daha fazla bilgi için lütfen http://momentjs.com/guides/#/warnings/js-date/ adresine bakın . Bağımsız değişkenler: [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
Uyarı anlamına gelir '2016-9-26 19:30've böyle tanınan bir ISO biçimi değildir düşünüyorum
Jaromanda X

biçimdeki hata nedir? 0 eklemem gerekir mi?
Jemai

1
Belgeleremoment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland'); göre yapabilirsiniz ... Bu, 1 veya 2 basamaklı ay ve günleri, 24 saat formatında 1 veya 2 basamaklı saatleri kabul eder
Jaromanda X

2
Hata, sağladığınız biçimin tanınan bir ISO biçimi olmamasıdır ... ya tanınan bir ISO biçimi sağlayın ya da beklenen biçimde "ipucu veren" bir dize sağlayın
Jaromanda X

Tamam teşekkürler bu nasıl bu biçimi de ekleyebilirim? var bugün = moment.tz (bugün dizesi, $. urlParam ('t_zone'));
Jemai

Yanıtlar:


180

Tüm harika belgelerine göz atın!

Burada Uyarı Mesajını tartışıyorlar .

Dize + Biçim

Uyarı: Dizeleri ayrıştırma için tarayıcı desteği tutarsız. Hangi biçimlerin desteklenmesi gerektiği konusunda herhangi bir belirti olmadığından, bazı tarayıcılarda işe yarayan diğer tarayıcılarda çalışmaz.

ISO 8601 dizeleri dışında herhangi bir şeyi ayrıştıran tutarlı sonuçlar için String + Format kullanmalısınız .

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

Dize + Biçimler (birden çok biçim)

Birden fazla biçiminiz varsa, String + Biçimlerine ('s' ile) bakın.

Bir giriş dizesinin biçimini tam olarak bilmiyorsanız, ancak bunun bir çoğundan biri olabileceğini biliyorsanız, bir dizi biçim kullanabilirsiniz.

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

Daha spesifik bir şey için lütfen belgelere göz atın.

Saat dilimi

Bölge'de Ödeme Ayrıştırma, saat dilimleri için eşdeğer belgeler.

Moment.tz yapıcısı, moment yapıcısı ile aynı bağımsız değişkenleri alır, ancak son bağımsız değişkeni saat dilimi tanımlayıcısı olarak kullanır.

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

DÜZENLE

//...
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
Belgeleri kopyalayıp yapıştırmak yerine, lütfen gerçek bir cevap verin.
Rebs

3
formatı "girdi" ye koymamda bana yardımcı olan buydu ("12-25-1995", ["AA-GG-YYYY", "YYYY-AA-GG"]);
17'de

2
@Rebs Bence genel çözüm basit değil çünkü birçok belge ekledim. Açıkçası Jemai için özel çözüm cevap olmalı ve o zamandan beri ekledim (teşekkürler!) Ama birincisi burada çok fazla belge var.
christo8989

Teşekkürler, ancak bu ağır biçimlendirme çerçevesi olmadan basit bir tarih istiyorsanız, bu uyarıyı görmezden gelebiliriz.
Webwoman

bu bana yardımcı oldu -> an ("12-25-1995", ["AA-GG-YYYY", "YYYY-AA-GG"]);
Cesar Rodriguez T

50

Bunu yapmak benim için işe yarıyor:

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

5
Bu konsol kirliliğini önlemek için en basit çalışma
Josey

2
Ben IE desteği ile herhangi bir derecede uğraşmak zorunda kimse için bu yaklaşım tavsiye etmem. Sonuçlar özellikle IE 11'de çok kesintili.
Ajm113

1
Bu en basit ve doğru cevaptır. Teşekkürler bana yardımcı oldu.
Tahir Afridi

15

Bu hatayla karşılaştım çünkü bir tarihten geçmeye çalışıyordum localStorage. Tarihi yeni bir Datenesneye aktarmak ve .toISOString () yöntemini çağırmak benim için hile yaptı:

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

Bu, konsoldaki uyarıları bastırdı.


Bu uyarıyı bastırır, ancak dezavantajı saat dilimine özgü iseniz, o zaman bunu önermem: çünkü '.toISOString ()' dediğimizde verilen tarihi UTC'ye dönüştürür. Deneyin "an (new Date (" 27/04/2016 ")) biçimi." Diğer cevabını belirtildiği gibi - yerel .. zaman tutacak
benkimim

15

fonksiyonunda anı böyle kullan

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

Bu sadece "amortisman uyarısı" kurtulmak istiyorsanız aradığınız kısa cevaptır
VictorC

6

Bu cevap, bu uyarının daha iyi anlaşılmasını sağlamaktır

Kullanımdan kaldırma uyarısı, zaman nesnesi oluşturmak için moment kullandığınızda oluşur var today = moment();.

Bu uyarı sizin için uygunsa, daha basit bir yöntemim var.

Bunun yerine kullanımdaki datenesneyi jskullanmayın moment. Örneğin moment(), geçerli tarihi almak için kullanın .

Veya jstarih nesnesini tarihe dönüştürün moment. Bunu jstarih nesnenizin biçimini belirterek yapabilirsiniz .

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

Örneğin:

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

(AMA BU YÖNTEMİ YASAKLANMADAN SADECE KULLANABİLİRSİNİZ, bu momentgelecekte amortismana tabi tutulabilir )


6
Ciddi anlamda! bu kullanımdan kaldırma uyarısının nasıl kaldırılacağı sorusu! bu kullanımdan kaldırmayı nasıl kullanacağınızı sormamak! Ayrıca, bu "gelecekte kaldırılacak" değil "bu, gelecekte andan itibaren amortismana tabi tutulabilir" zaten kullanımdan kaldırıldı!
Al-Mothafar

@ Al-Mothafar, küçük bir şüphem var, ifdurum başarısız olduğunda neden ötesine gittin . Devam etmemek için cevaptan çıkmalısınız.
Saahithyan Vigneswaran

2
Teşekkürler, bu bana burada ne bilmek istediğimi gerçekten gösteren cevap.
DigitalDesignDj

3

Kullanabilirsiniz

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

Bu, tarih, geçerli biçimimizin ne olduğunu anlayacağından ISO Biçimi olmadığında kullanılmalıdır.


1
Bu kod soruyu cevaplayabilse de, sorunun nasıl ve / veya neden çözüldüğü hakkında ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
leopar

@leopal bazı değişiklikler yaptı!
BeaST 30

2

Dize moment.js ile ayrıştırma.

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

Bu, hafta numarasını almak için unix formatını kullanmaya çalışırken kullanımdan kaldırma uyarısından kurtulmama yardımcı oldu.
curious.netter
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.