gpt4 book ai didi

javascript - 如何在没有时区的情况下发送 AngularStrap 日期选择器值?

转载 作者:IT王子 更新时间:2023-10-29 03:07:41 25 4
gpt4 key购买 nike

我想知道是否可以在不保留用户区域设置的时区信息的情况下使用 AngularStrap 的日期选择器。在我们的应用程序中,我们希望处理具有到期日期的 Contract 对象。

添加或编辑契约(Contract)对象时,有一个日期选择器字段用于选择日期。发生以下情况:

  1. 用户选择日期(例如 2013-10-24)
  2. Angular 将 javascript 日期对象绑定(bind)到 ng-model 字段
  3. 绑定(bind)的日期对象在用户的时区(例如 GMT+3)
  4. 用户提交表单
  5. 使用 Angular 的 $http 服务将日期发送到服务器

在第 5 步中,日期被转换为 UTC 格式。所选日期为 GMT+3 2013-10-24 午夜,但 UTC 转换将日期更改为 2013-10-23 晚上 9 点。

我们如何才能阻止转换,或者在整个过程中使用 UTC 日期?我们不希望契约(Contract)的日期根据用户的本地时区而改变。相反,我们希望日期始终为 2013 年 10 月 24 日,无论哪个时区。

我们当前的解决方案是对 AngularStrap 库进行一些小改动,以便日期在发送到服务器时不会发生变化。

如果我们可以在服务器中获取用户选择的时区,我们可以在那里进行另一次转换,但服务器没有该信息。

感谢所有想法!

最佳答案

问题不在于 AngularStrap。它只是 javascript 日期的工作方式以及 JSON 如何格式化它们以进行传输。当您将 javascript 日期对象转换为 JSON 字符串时,它会将字符串格式化为 UTC。

例如,我在犹他州,现在是 2013 年 10 月 24 日的 07:41。如果我创建一个新的 javascript 日期并将其打印到控制台,它将显示:

Thu Oct 24 2013 07:41:19 GMT-0600 (MDT)

如果我对同一日期进行字符串化(使用 JSON.stringify(date),我得到:

"2013-10-24T13:41:47.656Z"

您可以看到它不在我当前的时区,而是在 UTC。因此,当表单从 javascript 对象转换为 JSON 字符串时,转换发生在将表单发送到服务器之前。

最简单的方法是在将日期发送到服务器之前将日期更改为您自己选择的字符串。因此,与其让 JSON 将日期更改为 UTC,(假设您不关心一天中的时间),不如这样做:

var dateStrToSend = $scope.date.getUTCFullYear() + '-' + ($scope.date.getUTCMonth() + 1) +  '-' + $scope.date.getUTCDate();

这将为您提供一个类似于 '2013-10-24' 的基于 UTC 的字符串,然后您可以将其发送到服务器,而不是包含时间信息的 JSON 格式。希望对您有所帮助。

更新:正如@Matt Johnson 所说,有两种方法可以做到这一点。您说:我们如何才能阻止转换,或者在整个过程中使用 UTC 日期?。如果你想使用UTC,那么使用我上面的解释。如果您只想“阻止转换”,您可以使用以下方法:

var dateStrToSend = $scope.date.getFullYear() + '-' + ($scope.date.getMonth() + 1) +  '-' + $scope.date.getDate();

关于javascript - 如何在没有时区的情况下发送 AngularStrap 日期选择器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com