我想知道是否有可能使用AngularStrap的datepicker而不保留用户的语言环境的时区信息。在我们的应用程序中,我们要处理具有到期日期的Contract对象。
添加或编辑合同对象时,有一个日期选择器字段用于选择日期。发生以下情况:
在步骤5中,日期将转换为UTC格式。所选日期为格林尼治标准时间+3 2013-10-24(午夜),但UTC转换将日期更改为2013-10-23的晚上9点。
我们如何在整个过程中阻止转换或使用UTC日期?我们不希望合同的日期根据用户的本地时区更改。相反,我们希望该日期始终为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),则会得到:
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();
这将为您提供一个看起来像基于UTC的字符串,'2013-10-24'然后您可以将其发送到服务器,而不是包含时间信息的JSON格式。希望有帮助。
'2013-10-24'
更新:正如@Matt Johnson所说,有两种方法可以做到。您说:How could we prevent the conversion, or use UTC dates during the whole process?。如果要使用UTC,请使用我上面的解释。如果您只想“防止转换”,则可以使用以下方法:
How could we prevent the conversion, or use UTC dates during the whole process?
var dateStrToSend = $scope.date.getFullYear() + '-' + ($scope.date.getMonth() + 1) + '-' + $scope.date.getDate();