Angular Ui Bootstrap弹出式日期选择器的ngModelOptions的时区属性



我们在应用程序中使用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'(这是我发送到服务器的内容)。

相关内容

  • 没有找到相关文章

最新更新