880 Stimmen

Wie kann man prüfen, ob ein Objekt ein Datum ist?

Ich habe einen lästigen Fehler auf einer Webseite:

date.GetMonth() ist keine Funktion

Ich vermute also, dass ich etwas falsch mache. Die Variable date ist kein Objekt des Typs Date . Wie kann ich in Javascript nach einem Datentyp suchen? Ich habe versucht, eine if (date) aber es funktioniert nicht.

function getFormatedDate(date) {
    if (date) {
       var month = date.GetMonth();
    }
}

Wenn ich also einen defensiven Code schreiben und verhindern möchte, dass das Datum (das keines ist) formatiert wird, wie kann ich das tun?

Danke!

UPDATE: Ich möchte nicht das Format des Datums überprüfen, aber ich möchte sicher sein, dass der Parameter, der an die Methode getFormatedDate() ist vom Typ Date .

0 Stimmen

Falls es auch validiert werden sollte, ob die Datum ist kein Invalid Date : stackoverflow.com/a/44198641/5846045

1voto

Vadim Punkte 1085

Eine weitere Variante:

Date.prototype.isPrototypeOf(myDateObject)

0 Stimmen

Nett und kurz! Aber leider hat es die dasselbe Problem wie instanceof .

1 Stimmen

@BoghyonHoffmann im Falle von iFrame kann es so aussehen: iWindow.Date.prototype.isPrototypeOf(iWindow.date); // true iWindow.date instanceof iWindow.Date; // true

1voto

codeKonami Punkte 790

Ein Ansatz, der ein try/catch

function getFormattedDate(date = new Date()) {
  try {
    date.toISOString();
  } catch (e) {
    date = new Date();
  }
  return date;
}

console.log(getFormattedDate());
console.log(getFormattedDate('AAAA'));
console.log(getFormattedDate(new Date('AAAA')));
console.log(getFormattedDate(new Date(2018, 2, 10)));

1voto

Jahid Punkte 19666

Diese Funktion gibt zurück true wenn es sich um Datum oder false sonst:

function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

1 Stimmen

isDate(new (function AnythingButNotDate(){ })()) gibt zurück. true

1voto

Hossein Mousavi Punkte 824

Mit der folgenden Methode können Sie sogar prüfen, ob das Datum nicht "ungültig" ist

if(!!date.getDate()){
    console.log('date is valid')
}

0voto

Arun Punkte 433

Wir können sie auch mit folgendem Code validieren

var a = new Date();
a.constructor === Date
/*
true
*/

enter image description here

0 Stimmen

Der Konstruktor von function Date() {/*...*/} ist auch Date . D.h. ein einfacher Vergleich der Konstruktorfunktion ist zu fehleranfällig und führt häufig zu falsch positiven Ergebnissen. Umgehen Sie den benutzerdefinierten Objekttyp mit stackoverflow.com/a/44198641/5846045

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X