输入类型=";日期“;在AngularJS ng模型中给出以前的日期为reult。为什么?

输入类型=";日期“;在AngularJS ng模型中给出以前的日期为reult。为什么?,angularjs,html,Angularjs,Html,当我使用datepicker选择任何日期时,它会给出前一天的日期。我想知道为什么会这样。还有怎么解决呢 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Example</title> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.

当我使用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>

例子
日期:
用户={{user}}
这里是同样的演示。


谢谢

您的代码有很多错误:

  • 未定义ng应用程序
  • 未定义ng控制器
  • 您没有带有模块名和控制器的
    app.js
首先尝试初始化日期:

app.js

<!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>
index.html

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

例子
日期:
用户={{user}}

让我猜猜。。。你住在大不列颠的东部

从:

如果未提供任何参数,则构造函数将根据系统设置为当前日期和时间创建一个JavaScript日期对象

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

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

为了提供这种统一的行为,将其转换为UTC(协调世界时)日期,并将有关时区的信息附加到日期

我住在摩尔多瓦(欧洲),当我将
2015-05-15
插入您的物品时,我得到
user={“date”:“2015-05-14T21:00:00.000Z”}
。这是因为摩尔多瓦处于
GMT+3
时区,根据UTC(或GMT),当这里是午夜时,仍然是
5月24日晚9点

但是,如果您可以插入datetime字符串并提供中午时间,那么您将得到当天的时间。在此插入
2015-05-15T12:00:00
,然后自己检查

如果要创建没有
date.UTC
方法的日期:


在@iulian的帮助下,我了解了根据我的区域需要进行的修改。 如果您想知道根据时区选择的日期,请签出您的时区@,然后在获取的日期字符串中设置很大的差异

例如,我在印度,我的UTC时区是UTC+5:30,因此为了获得准确的日期和时间,我需要在获得的结果中加上5小时30分钟的符号

增加了5.5(小时)*60(分钟)*60(秒)*1000(毫秒),如下所示

$scope.user.date=新日期(+new date($scope.user.date)+5.5*60*60*1000)

这里是同样的演示

根据您的时区更改值并获得准确的值


谢谢

哎呀,忘了救普朗克尔了。Donecool。。就是这样+1、你能解释一下为什么不起作用吗仅通过初始化
new Date()
对象,它是如何工作的?使用
new Date()
对象初始化日期,将日期初始化为当前日期,并在对象中显示正确的键值对,但我无法使用当前日期初始化它,因为它显示选定的日期。这会产生问题。我也有同样的问题,为什么它在使用当前日期进行初始化时工作正常。@Kartik检查我答案上的注释,我已经在那里解释过了。例如,如果您尝试在凌晨1点使用日期,则首先初始化日期将不正确-它将向您显示前一天的详细说明+1.没有任何默认的日期设置,那么我们是否可以使用这种
日期。UTC
格式以全局方式仅声明一个?或者类似的东西。那么它是如何开始工作的。在下面的答案中手动设置日期之后(在日期中没有显示日期滞后)?只是想知道。谢谢;)@PankajParkar我不确定我是否理解你的问题。。你能详细描述一下吗?请看下面的评论部分answer@PankajParkar当您使用datepicker更改日期时,实际上是更改了同一日期的年、月、日,而不是创建新的日期或复制日期。因为小时数仍然存在,当根据时区进行调整时,它仍然会为您提供正确的日期。但是,如果您尝试在凌晨1点使用datepicker,此解决方案将不起作用-在调整时区后,它将显示您以前的日期。
var d = new Date();
var utcDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));