Angular-Ui Bootstrap Popup DatePicker 的 ngModelOptions 的时区 属性

Timezone Property of ngModelOptions of Angular-Ui Bootstrap Popup DatePicker

我们在我们的应用程序中使用 Angular-Ui Bootstrap 弹出式 DatePicker 并且已经 运行 进入 issues such as this 前一天被选中到用户实际选择的那个。

我们将选择器的日期设置为来自服务器的 UTC (json)。虽然,Javascript 日期对象是本地的,因此不匹配。

作为解决方案(显然),他们添加了一个 ngModelOptions,我看到它的用法如下:

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

带有标记

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

但是那个选择器的 doco 并没有真正解释它是如何 uses/consumes 那个时区 属性 的。我能找到的最接近的解释是 ngModelOptions 本身的 doco,它说:

You can specify the timezone that date/time input directives expect by providing its name in the timezone property.

我希望有人能简要解释一下该选择器如何使用 ngModelOptions 指令的时区 属性 以及我是否应该将其设置为 utc 或将浏览器偏移量设置为 utc。

谢谢

对于那些仍在使用 Angular-UI Bootstrap 并寻找答案的人:

您可以使用 ng-model 选项,例如 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'}" /> 

现在,当我 select 一个日期并在我的浏览器中查看它时,它显示为 Sat May 07 2022 01:00:00 GMT+0100 (British Summer Time),因此调用 dateModel.toISOString() 得到 '2022-05-07T00:00:00.000Z'(这是我发送到服务器的内容)。