Avertissement de dépréciation dans Moment.js - Pas dans un format ISO reconnu

176

Je reçois un avertissement indiquant qu'une valeur fournie à l'instant n'est pas dans un format ISO reconnu. J'ai changé ma variable aujourd'hui avec la fonction moment et cela ne fonctionne toujours pas.

Voici l'erreur d'avertissement:

Avertissement de dépréciation: la valeur fournie n'est pas dans un format ISO reconnu. moment construction revient à js Date (), qui n'est pas fiable sur tous les navigateurs et toutes les versions. Les formats de date non ISO sont déconseillés et seront supprimés dans une prochaine version majeure. Veuillez consulter http://momentjs.com/guides/#/warnings/js-date/ pour plus d'informations. Arguments: [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);
});
Jemai
la source
1
Je pense que l'avertissement fait référence à '2016-9-26 19:30'un format ISO reconnu et que ce n'est pas un format ISO reconnu
Jaromanda X
quelle est l'erreur sur le format? alors dois-je ajouter 0?
Jemai
1
Vous pouvez le faire moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');selon la documentation ... cela acceptera 1 ou 2 chiffres des mois et des jours, 1 ou 2 chiffres des heures au format 24 heures
Jaromanda X
2
L'erreur est que le format que vous fournissez n'est pas un format ISO reconnu ... soit fournissez un format ISO reconnu, soit fournissez une chaîne qui "indique" le format attendu
Jaromanda X
Ok, merci que diriez-vous de celui-ci puis-je ajouter ce format aussi? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai

Réponses:

180

Découvrez toute leur superbe documentation!

Voici où ils discutent du message d'avertissement .

Chaîne + Format

Avertissement: la prise en charge par le navigateur de l'analyse des chaînes est incohérente. Comme il n'y a pas de spécification sur les formats à prendre en charge, ce qui fonctionne dans certains navigateurs ne fonctionnera pas dans d'autres navigateurs.

Pour des résultats cohérents analysant autre chose que les chaînes ISO 8601, vous devez utiliser String + Format .

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

Chaîne + Formats (plusieurs formats)

Si vous avez plus d'un format, vérifiez leur chaîne + formats (avec un «s»).

Si vous ne connaissez pas le format exact d'une chaîne d'entrée, mais que vous savez qu'il peut s'agir de l'un des nombreux formats, vous pouvez utiliser un tableau de formats.

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

Veuillez consulter la documentation pour plus d'informations.

Fuseau horaire

Checkout Parsing in Zone , la documentation équivalente pour les fuseaux horaires.

Le constructeur moment.tz prend tous les mêmes arguments que le constructeur moment, mais utilise le dernier argument comme identificateur de fuseau horaire.

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

ÉDITER

//...
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);
}
//...
christo8989
la source
89
Plutôt que de copier et coller de la documentation, veuillez fournir une réponse concrète.
Rebs
3
c'est ce qui m'a aidé à mettre le format en "input" - moment ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Demodave du
2
@Rebs Je pense avoir ajouté beaucoup de documentation car la solution générale n'est pas simple. Évidemment, la solution spécifique pour Jemai aurait dû être dans la réponse et je l'ai ajoutée depuis (merci à vous!) Mais la première est la raison pour laquelle il y a tant de documentation ici.
christo8989
Merci mais que faire si vous voulez juste une date simple sans ce cadre de formatage lourd, nous pouvons peut-être ignorer cet avertissement?
Webwoman
cela m'a aidé -> moment ("12-25-1995", ["MM-JJ-AAAA", "AAAA-MM-JJ"]);
Cesar Rodriguez T
50

Faire cela fonctionne pour moi:

moment(new Date("27/04/2016")).format
Jigar Bhatt
la source
5
C'est la solution la plus simple pour éviter la pollution de la console
Josey
2
Je ne conseillerais pas cette approche à quiconque doit traiter avec le soutien d'IE à quelque degré que ce soit. Les résultats sont très floconneux spécialement sur IE 11.
Ajm113
1
C'est la réponse la plus simple et la plus précise. Merci, cela m'a aidé.
Tahir Afridi
15

J'ai rencontré cette erreur parce que j'essayais de transmettre une date de localStorage. Passer la date dans un nouvel Dateobjet, puis appeler .toISOString () a fait l'affaire pour moi:

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

Cela a supprimé tous les avertissements dans la console.

Shahzeb Khan
la source
Cela supprimera l'avertissement, mais l'inconvénient est que si vous êtes spécifique au fuseau horaire, je ne suggérerais pas ceci: car cela convertirait la date donnée en UTC comme nous le disons '.toISOString ()'. Essayez "moment (nouvelle date (" 27/04/2016 ")). Format" comme indiqué dans une autre réponse - ce qui garderait l'heure locale ..
whoami
15

utilisez le moment dans votre fonction comme ceci

 moment(new Date(date)).format('MM/DD/YYYY')
MARYLAND. ABU TALHA
la source
C'est la réponse courte que vous recherchez si vous voulez simplement vous débarrasser de "l'avertissement déprécié"
VictorC
6

Cette réponse est de donner une meilleure compréhension de cet avertissement

Avertissement Obsolescence est causée lorsque vous utilisez moment pour créer un objet de temps, var today = moment();.

Si cet avertissement vous convient, j'ai une méthode plus simple.

N'utilisez pas d' dateobjet d' jsutilisation à la momentplace. Par exemple, utilisez moment()pour obtenir la date actuelle.

Ou convertissez l' jsobjet de momentdate en date. Vous pouvez simplement le faire en spécifiant le format de votre jsobjet de date.

c'est à dire, moment("js date", "js date format");

par exemple:

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

(MAIS VOUS NE POUVEZ UTILISER CETTE MÉTHODE QUE JUSQU'À CE QU'ELLE SOIT DÉPRÉCIÉE, cela pourrait être déprécié momentà l'avenir)

Saahithyan Vigneswaran
la source
6
Sérieusement! la question sur la façon de supprimer cet avertissement d'obsolescence! ne pas demander comment utiliser cette dépréciation! aussi, c'est "ceci sera supprimé dans le futur" non "cela pourra être déprécié à partir du moment dans le futur" c'est déjà obsolète!
Al-Mothafar du
@ Al-Mothafar, j'ai un petit doute, pourquoi êtes-vous allé au-delà quand if condition a échoué. Vous devez quitter la réponse et ne pas continuer.
Saahithyan Vigneswaran
2
Merci, c'est la réponse qui m'a vraiment montré ce que je peux ici savoir.
DigitalDesignDj
3

Vous pouvez utiliser

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

Cela devrait être utilisé lorsque la date n'est pas au format ISO car cela indiquera à l'instant quel est notre format actuel.

BeaST 30
la source
1
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
léopal le
@leopal a fait quelques changements!
BeaST 30
2

Analyse de la chaîne avec moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);
Коля Ракета
la source
Cela m'aide à me débarrasser de l'avertissement d'obsolescence lorsque j'essayais d'utiliser le format Unix pour obtenir le numéro de semaine.
curious.netter