角度日期问题

时间:2016-06-30 18:46:45

标签: angularjs

请参阅以下示例:https://plnkr.co/edit/SGa2xy7M2OuFYOVkeuYe?p=preview

<div ng-app="app" ng-controller="MainController">
    <div class="col-sm-3">
        <input ng-model="flight.date" name="date" type="date" placeholder="" class="form-control input-md" required="" max="<% Date | date:'yyyy-MM-dd' %>" ng-change="changeDate()">
    </div>
    <% flight.date | date %>
    <% flight.date | date : medium : PST %>
</div>

我在GMT + 2时区(CEST)和冬季GMT + 1(CET)。

当我今天从输入字段(2016年6月30日)选择时,输出Angular产生的是UTC时间。所以它从实际时间减去2小时。但因为我们只选择日期时间总是00:00:00。

因此从00:00:00减去2小时将导致前一天的日期。

我该如何解决?我尝试手动将时间添加到有效的时间戳。但是这个问题在午夜和凌晨2点之间仍然存在。

谢谢!

[编辑] 我目前正在使用以下解决方法:

由于我们只需要日期,我只是手动将时间设置为下午6点,因此1或2小时的差异不会导致日期发生变化。

d.setHours('18', '00', '00');

1 个答案:

答案 0 :(得分:1)

JavaScript Date实例始终相对于您当前的位置。但是,您只想使用日期部分而不是时间部分,因此在输入和显示日期时,您可以使用同一个时区。只需选择一个时区,例如世界标准时间。您可以通过将其添加为模型选项来确保使用UTC(而不是浏览器的默认值)输入时间:

<input ng-model="flight.date" ng-model-options="{timezone:'UTC'}">

确保在显示日期时也使用该时区:

<% flight.date | date:'mediumDate':'UTC' %>

通过此Plunker的更新来查看我的话题:https://plnkr.co/edit/LqZv7olKCl12OjDMvicF?p=preview