AngularJS 中的 getTime(),Java 脚本中的新 Date(date) 错误

getTime() in AngularJS , error in new Date(date) in Java Script

$scope.notAvailableDayClick=function(val1,date){    
        console.log("day clcik")
        var startDate=$filter('date')(date,'yyyy-MM-dd')
        var endDate=new Date(startDate)
        endDate.setMinutes(59)
        endDate.setHours(23)
    }

日期是 2015-01-16 如果我这样做

new Date(date)

Thu Jan 15 2015 16:00:00 GMT-0800 (Pacific Standard Time)

所以我必须使用 AngularJS

var startDate=$filter('date')(date,'yyyy-MM-dd')

但现在我需要 startDate.getTime(),发生错误我认为它需要它作为一个字符串

只需使用原始日期创建 endDate 而不是 angular 过滤后的版本

var endDate=new Date(date);
endDate.setMinutes(59);
endDate.setHours(23);

根据 angular docs the filter returns a String in requested format. Date constructor 通常接受 ISO8601 格式,尽管有些浏览器支持许多格式,我记得。可能不支持您的格式 yy-MM-dd

我希望变量 date 是一个有效的 Date 对象,在这种情况下,为什么不使用它来代替使用 angular 过滤器制作的格式化字符串?

var endDate = new Date(date);
endDate.setMinutes(59);
endDate.setHours(23);

还有一个 Date 接受格式

的构造函数
new Date(year, month[, date[, hour[, minutes[, seconds[, milliseconds]]]]]);

因此,如果您手头有 2015-01-16,您可以通过以下方式获得当天的午夜:

var startDate = "2015-01-16";
var year = parseInt(startDate.split('-')[0], 10);
var month = parseInt(startDate.split('-')[1], 10) - 1;
var year = parseInt(startDate.split('-')[2], 10);
var endDate = new Date(year, month, date, 23, 59);

最好的选择是使用 ISO 字符串,因为 Google Chrome 支持这种格式:MM-dd-yyyy。在 Mozilla 中,此格式给出无效日期。

new Date('MM-dd-yyyy')

所以在Angular中使用Iso-String,可以这样做:

new Date($filter('date')(yourdDate,'yyyy-MM-ddTHH:mm:ss.sssZ'))