2016-03-14 47 views
0

我想在日期输入中设置默认日期,当输入值发生变化并且值为空或未定义时。首先,我今天选择值作为值,这是正常的。然后我清除日期(点击'x'点击分叉),将值转换为默认值('1970-01-01')。然后我今天再次选择值,在My js代码中检查值是未定义的,所以将值设置为默认值('1970-01-01')。我想知道为什么我今天不能选择价值,发生了什么?我在Chrome浏览器中测试过。在angularjs中输入日期的东西很奇怪

的html代码:

<!doctype html> 
<html ng-app="app"> 
<head> 
<script src="angular/angular.min.js"></script> 
</head> 
<body> 
     <div ng-controller="MainCtrl"> 
      <input type="date" max="{{today}}" ng-model="myDate.date" ng-change="change()"> 
     </div> 
<script src="app.js"></script> 
</body> 
</html> 

JS代码:

var app = angular.module('app', []); 

app.controller('MainCtrl', ['$scope', function ($scope) { 
    $scope.myDate = { 
    date:null 
} 
$scope.today = '2016-03-14'; 
$scope.change = function(){ 
    if(!$scope.myDate.date){ 
     $scope.myDate.date = new Date('1970-01-01'); 
    } 
} 
}]); 

refer picture
http://plnkr.co/edit/UKtn8FbvsczbFtn44Vuq?p=preview

+0

请加插页 –

回答

0

首先,我不会推荐使用Chrome内置的日期选择器,因为使用你的方法进行输入盒子在FF中完全无法使用。

关于您的问题:

这是选择2016-03-14作为输入时,输出日期的样子对我说:2016-03-13T23:00:00.000Z(偏移是由于我timeszone我假设)。

现在让我们通过按“x”来重置输入框:1970-01-01T00:00:00.000Z

如果我现在尝试再次选择2016-03-14,它将不起作用,由于日期加上我的时区现在超过了允许的输入值max,所以它默认回到1970-01-01

将时区添加到new Date('1970-01-01')应解决问题(使用new Date('1970-01-01T23:00:00.000Z')为我工作,并允许我选择2016-03-14)。

+0

谢谢你的帮助。这对我有很大帮助。我住在Timezone 8.I使用新日期('1970-01-01T16:00:00.000Z')来解决问题。在同时,我需要将默认值更改为新日期('1969-12-31T16:00:00.000Z')。@ chrissatchell –

+0

@ Ao.Zhang如果其他时区的用户输入日期,它仍能正常工作吗?这就是问题所在 –