角度的日期问题

时间:2015-05-14 11:42:35

标签: javascript html angularjs datetime

我正在使用HTML5日期选择器。 选择日期后,ng-model显示较旧的日期,而不是选择的当前日期。

<input type="date" ng-model="dateModel" />

当我选择当前日期时,ng-model有2015-05-13T18:30:00.000Z而不是2015-05-14。 如果我在jQuery中使用它可以正确存储为2015-05-14

我该如何解决这个问题?

Plunker - AngularJS

Plunker - jQuery

3 个答案:

答案 0 :(得分:6)

这是Angular版本的正确日期,但是日期格式化为UTC,如果您不完全清楚这一点,可能会出现错误。

  

时区始终为零UTC偏移,由后缀“Z”表示。

UTC Source

调查Angular date filters。开箱即用有很多选项,几乎可以获得您希望的任何格式 - 但最重要的是,已经解决了您的时区问题。例如......

{{dateModel | date:'shortDate'}}  // -- prints 5/14/15
{{dateModel | date:'yyyy-MM-dd'}} // -- prints 2015-05-14

Plunker Link

更多关于明确提供timezone参数并信任浏览器以解决我们的时间的问题(Angular docs)

{{ date_expression | date : format : timezone }}  // -- template binding
$filter('date')(date, format, timezone)           // -- javascript
  

用于格式化的时区。它了解UTC / GMT和   美国大陆时区的缩写,但一般用途,请使用   时区偏移,例如,'+ 0430'(4小时,东部30分钟)   格林威治子午线)如果没有指定,浏览器的时区   将被使用。

如果您希望使用ngModelOptions明确定义时区而不是利用过滤器,则可以使用以下内容

<input type="date" 
    ng-model="dateModel" 
    ng-model-options="{timezone: timezone}" /> 


var date = new Date()
$scope.timezone = ((date.getTimezoneOffset() / 60) * -100) // e.g. -400 EDT

请参阅this answer,其中解释了手动计算背后的逻辑

Plunker Link - ng-model-options

答案 1 :(得分:1)

AngularJS将模型设置为UTC日期时间。我认为这是您需要检查的问题:http://github.com/angular/angular.js/issues/8447

因此,对于我的时区,如果我在输入上设置ng-model-options="{timezone: '-0200'}",我会得到与jQuery版本相同的日期时间:http://plnkr.co/edit/Qesmucv4aU5Yqu9sxbtp?p=preview

答案 2 :(得分:0)

{{dateModel | date : 'yyyy-MM-dd'}}
// {{ date_expression | date : format : timezone}}