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

6voto

G Clovs Punkte 1745

Pfeilfunktion

const isValidDate = (value: any) => value instanceof Date && !isNaN(value);

Funktion:

function isValidDate(d) {
  return d instanceof Date && !isNaN(d);
}

5voto

mjwrazor Punkte 1608

Ich habe eine viel einfachere Methode verwendet, bin mir aber nicht sicher, ob diese nur in ES6 verfügbar ist oder nicht.

let a = {name: "a", age: 1, date: new Date("1/2/2017"), arr: [], obj: {} };
console.log(a.name.constructor.name); // "String"
console.log(a.age.constructor.name);  // "Number"
console.log(a.date.constructor.name); // "Date"
console.log(a.arr.constructor.name);  // "Array"
console.log(a.obj.constructor.name);  // "Object"

Dies funktioniert jedoch nicht bei null oder undefiniert, da sie keinen Konstruktor haben.

1 Stimmen

Jedes benutzerdefinierte Objekt mit dem Konstruktornamen "Date" gibt "Date" was ebenso riskant ist wie die Prüfung, ob der Parameter getMonth Eigentum.

3 Stimmen

@boghyon hört sich so an, als ob derjenige, der ein Objekt mit dem Konstruktornamen einer bereits vordefinierten Javascript-Standardbibliothek erstellt, nicht in erster Linie den Best Practices folgt. Das wäre so, als würde man Lodash herunterladen und dann sein eigenes Lodash-Modul erstellen und erwarten, dass es funktioniert.

0 Stimmen

Beachten Sie, dass, wenn der Wert null dann value.constructor.name eine Ausnahme auslöst.

2voto

Mego Elhawary Punkte 41

Verwenden Sie einfach Moment

import moment from 'moment';

moment(myvar).isValid(); //  return true or false

2voto

pavlo Punkte 391

Sie können auch die Kurzform verwenden

function getClass(obj) {
  return {}.toString.call(obj).slice(8, -1);
}
alert( getClass(new Date) ); //Date

oder etwas in dieser Art:

(toString.call(date)) == 'Date'

2voto

Powerlord Punkte 84404

Sie könnten prüfen, ob eine Funktion speziell für das Date-Objekt existiert:

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

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