Как проверить, является ли объект датой? - PullRequest
480 голосов
/ 13 марта 2009

У меня раздражающая ошибка на веб-странице:

date.GetMonth () не является функцией

Итак, я полагаю, что я делаю что-то не так. Переменная date не является объектом типа Date. Как я могу проверить тип данных в Javascript? Я пытался добавить if (date), но он не работает.

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

Итак, если я хочу написать защитный код и предотвратить форматирование даты (не одной), как мне это сделать?

Спасибо!

ОБНОВЛЕНИЕ: Я не хочу проверять формат даты, но хочу убедиться, что параметр, переданный методу getFormatedDate(), имеет тип Date.

Ответы [ 16 ]

1 голос
/ 27 июня 2017

Я использовал гораздо более простой способ, но не уверен, доступен ли он только в ES6 или нет.

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"

Однако, это не будет работать со значениями null или undefined, так как у них нет конструктора.

1 голос
/ 29 марта 2015

Эта функция вернет true, если это Дата или false в противном случае:

function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
} 
0 голосов
/ 20 февраля 2019

Подход с использованием try / catch

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

console.log(getFormatedDate());
console.log(getFormatedDate('AAAA'));
console.log(getFormatedDate(new Date('AAAA')));
console.log(getFormatedDate(new Date(2018, 2, 10)));
0 голосов
/ 05 марта 2018

Еще один вариант:

Date.prototype.isPrototypeOf(myDateObject)
0 голосов
/ 06 апреля 2017

Не могли бы вы просто использовать

function getFormatedDate(date) {
    if (date.isValid()) {
       var month = date.GetMonth();
    }
}
0 голосов
/ 13 марта 2009

На самом деле дата будет иметь тип Object. Но вы можете проверить, есть ли у объекта метод getMonth и можно ли его вызвать.

function getFormatedDate(date) {
    if (date && date.getMonth && date.getMonth.call) {
       var month = date.getMonth();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...