当我使用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
由于
答案 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>
答案 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
根据您的时区更改值并获取确切的值。
由于