AngularJS中的getTime(),Java脚本中新的日期(日期)中的错误

时间:2015-01-04 18:32:42

标签: javascript angularjs

$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(),错误发生我认为它需要它作为一个字符串

3 个答案:

答案 0 :(得分:3)

根据角度docs,过滤器会以请求的格式返回StringDate constructor通常接受ISO8601格式,但有些浏览器支持许多格式,因为我记得。可能不支持您的格式yy-MM-dd

我希望变量date是有效的Date对象,在这种情况下,为什么不使用它而不是使用角度过滤器创建的格式化字符串?

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);

答案 1 :(得分:2)

只需使用原始日期即可创建endDate而非角度过滤版

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

答案 2 :(得分:2)

最佳选择是使用ISO-String,因为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'))