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

0voto

Mo Ganji Punkte 996

Inspiriert durch diese Antwort Diese Lösung funktioniert in meinem Fall (ich musste prüfen, ob der von der API erhaltene Wert ein Datum ist oder nicht):

!isNaN(Date.parse(new Date(YourVariable)))

Wenn es sich um eine zufällige Zeichenkette handelt, die von einem Client oder einem anderen Objekt kommt, können Sie auf diese Weise herausfinden, ob es sich um ein datumsähnliches Objekt handelt.

0 Stimmen

Das hat bei mir perfekt funktioniert. Danke.

0voto

OZZIE Punkte 5085

Ich hatte einige Probleme mit React Hooks, wo das Datum später / lazy geladen kommen würde und dann der anfängliche Zustand kann nicht null sein, wird es nicht passieren ts Prüfungen, aber offenbar ein leeres Objekt tut den Trick dann! :)

const [birthDate, setBirthDate] = React.useState({})

<input
  value={birthDate instanceof Date ? birthDate.toISOString() : ''}
  name="birthDay"
/>

0voto

vartec Punkte 124396

Das aktuelle Datum ist vom Typ Object . Sie können jedoch prüfen, ob das Objekt getMonth Methode und ob sie aufrufbar ist.

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

2 Stimmen

Die Antwort von Christoph ist genauer. Die Eigenschaft "Aufruf" bedeutet nicht unbedingt, dass es sich um eine Funktion handelt!

-1voto

Elise Chant Punkte 4839

Wenn Sie Typescript verwenden, können Sie dies mit dem Typ Datum überprüfen:

const formatDate( date: Date ) => {}

-4voto

Grumpy Punkte 1935

Könnten Sie nicht einfach

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

1 Stimmen

Nein, nur das Datumsobjekt hat die isValid Methode

2 Stimmen

@grumpy @nikkwong Nein und nein. Das Standard-Datumsobjekt hat keine isValid . Nur moment.js hat eine solche API.

0 Stimmen

isValid Methode ist im Datumsobjekt nicht verfügbar, daher wird ein Fehler ausgegeben.

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