【问题标题】:Something strange with date input in angularjsangularjs中的日期输入有些奇怪
【发布时间】:2016-03-14 11:50:53
【问题描述】:

当输入值更改并且值为 null 或未定义时,我正在尝试将默认日期设置为日期输入中的最大日期。首先我选择今天作为值,这是正常的。然后我清除了日期(单击类似的叉' x'),值变成默认值('1970-01-01')。然后我再次选择今天作为值,在我的js代码中检查值未定义,因此将值设置为默认值('1970-01 -01')。我想知道为什么我不能选择今天作为值,发生了什么?我在 chrome 浏览器中测试。

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

【问题讨论】:

  • 请添加插件

标签: javascript angularjs date input


【解决方案1】:

首先,我不建议使用 Chrome 的内置日期选择器,因为使用您的方法会使输入框在 FF 中完全无法使用。

关于您的问题:

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

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

如果我现在再次尝试选择2016-03-14,它将无法正常工作,它会默认返回1970-01-01,因为日期加上我的时区现在超过了max 允许的输入值。

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

【讨论】:

  • 感谢您的帮助。这对我很有帮助。我住在时区 8。我使用 new Date('1970-01-01T16:00:00.000Z') 来解决问题。在同时我需要将默认值更改为 new Date('1969-12-31T16:00:00.000Z').@chrissatchell
  • @Ao.Zhang 如果来自其他时区的用户输入他们的日期,它仍然有效吗?这就是问题
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 2020-02-05
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
相关资源
最近更新 更多