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

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
}


为什么总是假?

年,月等件已正确过滤:/

最佳答案

以下语句始终为假,也许您对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对象。

关于javascript - Angular JS-isDate()无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22938734/

10-12 22:07