Angular js - isDate()不会工作

时间:2014-04-08 13:35:51

标签: javascript string angularjs date

我正在尝试检查某个值是否是这样的日期:

var input = "2014-04-01T15:22:30.000Z";

var dateTime = {
    year: $filter('date')(input,'yyyy'),
    day: $filter('date')(input,'EEE'),
    dayNum: $filter('date')(input,'d'),
    month: $filter('date')(input,'MMM'),
    hours:$filter('date')(input,'H'),
    mins: $filter('date')(input,'m'),
    seconds:$filter('date')(input,'ss')
};

if(angular.isDate(dateTime.year+' '+dateTime.month+' '+dateTime.dayNum)) { 
    // always false 
}

为什么总是假的?

正确过滤年,月等部分:/

2 个答案:

答案 0 :(得分:4)

以下陈述总是错误的,也许您对isDate如何工作的假设不正确?

angular.isDate('2014 Mar 1');

这是source code for the isDate function。您将看到它检查提供的值是否是javascript Date对象。

function isDate(value){
  return toString.call(value) === '[object Date]';
}

您可能想知道为什么angular允许您执行以下操作:

var input = "2014-04-01T15:22:30.000Z";
var year = $filter('date')(input,'yyyy');

这是因为date filter实际上会在返回格式化副本之前将输入转换为日期。因此,使用日期过滤器,它允许您传入字符串,但isDate函数需要Date对象。

答案 1 :(得分:0)

dateTime.year+' '+dateTime.month+' '+dateTime.dayNum是一个字符串,而不是日期对象。