输入类型=“日期”,将前一个日期作为AngularJS ng-model中的reult。为什么?

时间:2016-04-02 14:48:19

标签: angularjs html5

当我使用datepicker选择任何日期时,它会给出前一天的日期。我想知道为什么会这样。还有如何解决它。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
    <script   src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
</head>
<body ng-app="">
    <div>
        <form novalidate class="simple-form">
            Date: <input type="date" ng-model="user.date" /><br />
        </form>
        <pre>user = {{user}}</pre>
    </div>
</body>
</html>

以下是相同的演示。 Demo

由于

3 个答案:

答案 0 :(得分:3)

让我猜一下......你住在英国东部。

来自MDN

  

如果没有提供参数,构造函数会根据系统设置为当前日期和时间创建一个JavaScript Date对象。

当您将日期插入2016-04-02时,它会根据您的本地设置在午夜转换为Date对象。

  

JavaScript Date对象提供跨平台的统一行为。时间值可以在系统之间传递以表示相同的时刻,如果用于创建本地日期对象,则将反映当地的等效时间。

为了提供这种统一的行为,它将转换为UTC(协调世界时)日期,并附有与您的日期相关的时区信息。

我住在摩尔多瓦(欧洲),当我在你的掠夺者中插入2015-05-15时,我得到user = {"date":"2015-05-14T21:00:00.000Z"}。这是因为摩尔多瓦处于GMT+3时区,当它在午夜时,根据UTC(或GMT),它仍然是9PM, 24th of May

但是,如果您可以插入日期时间字符串,并且您将提供正午时间,那么您将获得同一天。在此plunker fork中插入2015-05-15T12:00:00并自行检查。

如果您想创建一个不具有Date.UTC方法的日期:

var d = new Date();
var utcDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));

答案 1 :(得分:1)

您的代码有很多错误:

  • ng-app未定义
  • ng-controller未定义
  • 您没有app.js模块名称和控制器

首先尝试初始化日期:

<强> app.js

(function () {
    'use strict';

    angular.module('myApp', []);

    angular
        .module('myApp')
        .controller('MainCtrl', MainCtrl);

    MainCtrl.$inject = ['$scope'];

    function MainCtrl($scope) {

        $scope.user = new Date();

    }
}());

<强>的index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
  <script src="app.js"></script>
  </head>
<body ng-app="myApp">
  <div ng-controller="MainCtrl">
    <form class="simple-form">
      Date: <input type="date" ng-model="user" />
    </form>
    <pre>user = {{ user }}</pre>
  </div>
</body>
</html>

Demo

答案 2 :(得分:0)

在@iulian回答的帮助下,我根据我的区域了解了所需的修改。 如果您想知道根据您的时区选择的日期,请查看您的时区@ https://en.wikipedia.org/wiki/List_of_time_zones_by_country,然后在获得的日期字符串中设置那么大的差异。

例如。我在印度,我的UTC时区是UTC + 5:30,所以要获得确切的日期和时间,我需要在获得的结果中添加5小时30分钟的标志。

added 5.5(hrs)*60(minutes)*60(sec)*1000(miliseconds) as follows

$scope.user.date = new Date(+new Date($scope.user.date) + 5.5 * 60 * 60 * 1000);

以下是相同的演示。 Demo

根据您的时区更改值并获取确切的值。

由于