我们在应用程序中使用Angular Ui Bootstrap Popup DatePicker,并遇到了类似这样的问题,即前一天被选择为用户实际选择的日期。
我们从服务器上将选择器的日期设置为UTC(json)。尽管Javascript Date对象是本地的,因此不匹配。
作为一个解决方案(显然),他们添加了一个ngModelOptions,我看到它的使用方式如下:
var date = new Date()
$scope.timezone = ((date.getTimezoneOffset() / 60) * -100)
带标记
<input type="date"
ng-model="dateModel"
ng-model-options="{timezone: timezone}" />
但该选择器的doco并没有真正解释它是如何使用/使用时区属性的。我能找到的最接近解释是ngModelOptions本身的文档,其中写道:
您可以指定日期/时间输入指令所期望的时区在时区属性中提供其名称。
我希望有人能简要解释该选择器如何使用ngModelOptions指令的时区属性,以及我应该将其设置为utc还是将浏览器偏移量设置为utch。
感谢
对于那些仍在使用Angular UI Bootstrap并寻找答案的人:
可以使用ng个模型选项,例如ng-model-options="{timezone: 'UTC'}"
。这将转换日期对象,使该时区中的时间为00:00。
如果没有此设置,dateModel值将为浏览器本地时间的午夜。我的浏览器位于BST(UTC+1),因此默认日期为:Sat May 07 2022 00:00:00 GMT+0100 (British Summer Time)
,如果然后使用调用dateModel.toISOString()
,则转换为"2022-05-06T23:00:00.000Z"。
要获取表示UTC午夜的日期对象,请设置如下选项:
<input type="date"
ng-model="dateModel"
ng-model-options="{timezone: 'UTC'}" />
现在,当我选择一个日期并在浏览器中查看时,它显示为Sat May 07 2022 01:00:00 GMT+0100 (British Summer Time)
,因此调用dateModel.toISOString()
会得到'2022-05-07T00:00:00.000Z'
(这是我发送到服务器的内容)。