为什么当我选择日期(使用HTML5日期)时,Javascript显示的日期与日期选择器的日期不同?

时间:2016-02-02 14:31:54

标签: javascript angularjs html5 date

这是羽毛球:http://plnkr.co/edit/c7N78xvGa4WYDehVZjD6?p=preview

<body ng-app="dateInputExample">
  <script>
   angular.module('dateInputExample', [])
     .controller('DateController', ['$scope', function($scope) {
       $scope.example = {
         value: new Date(2013, 9, 22)
       };
     }]);
</script>
<form name="myForm" ng-controller="DateController as dateCtrl">
   <label for="exampleInput">Pick a date in 2013:</label>
   <input type="date" id="exampleInput" name="input" ng-model="example.value"
       placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
   <div role="alert">
     <span class="error" ng-show="myForm.input.$error.required">
         Required!</span>
     <span class="error" ng-show="myForm.input.$error.date">
         Not a valid date!</span>
    </div>
    <tt>value = {{example.value | date: "yyyy-MM-dd"}}</tt><br/>
    <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
    <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
    <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
    <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>

    {{example.value}}
</form>
</body>
</html>

这是输出:

enter image description here

为什么日期值与日期选择器上显示的日期值不同?如何解释这个日期?

"2013-10-21T16:00:00.000Z"

2 个答案:

答案 0 :(得分:1)

日期选择器选择您当地时区的日期。也就是说,当选择日期时,它被设置为当地时间的午夜。显示日期时,它以UTC显示(即最后的&#34; Z&#34;表示)。您当地的时区似乎比UTC(俄罗斯?)早8小时,因此您的时间午夜是UTC前一天的16:00。换句话说,他们都是完全相同的时间 - 他们只是在不同的时区表达。

显示日期的toString()方法(由于您未指定日期应如何显示而隐式调用日期)显示UTC中的日期,其中包含您在那里看到的神秘格式。它被设计为比人类可读的机器可读性更高。要以当地时区显示日期(并采用更好的格式),请使用toDateString()方法显示日期:

{{example.value.toDateString()}}

现在日期将匹配。

答案 1 :(得分:0)

    {{example.value|date:"MM/dd/yyyy"}}
使用角度日期过滤器,最好使用日期过滤器文档https://docs.angularjs.org/api/ng/filter/date