【问题标题】:Submitting time from Javascript to Python Backend从 Javascript 提交到 Python 后端的时间
【发布时间】:2017-04-22 07:03:05
【问题描述】:

我有一个表单,可以将日期对象从 javascript 发送到 python 后端。日期在GMT +0530中输入,但在python中,它被解析为GMT +0000

以下是 javascript 日志:

> $scope.my_date.getTime()
< 1480617000000
> $scope.my_date
< Fri Dec 02 2016 00:00:00 GMT+0530 (IST)

所以,上面的日期被解析成Thur Dec 01 2016 18:30:00 GMT+0000

如何发送填写表格所在国家/地区的时区,以便我可以使用该时区将时间从Dec 01 转换为Dec 02

我可以通过以下方法以小时为单位发送偏移量(到 python):

> $scope.my_date.getTimezoneOffset()/60
< -5.5

但是,Python 的 pytz 理解 "Asia/Kolkata" 格式的时区,而不是 -5.5 格式。

我可以使用-5.5 手动调整日期,但我正在寻找一个干净的解决方案。

【问题讨论】:

    标签: javascript python datetime timezone


    【解决方案1】:

    我使用以下方法解决了上述问题。

    我在发送到服务器之前更改了 JS 本身的时间。

    ($scope.my_date.getTime()/1000) - ($scope.my_date.getTimezoneOffset()*60)
    

    【讨论】:

      【解决方案2】:

      使用Math.floor($scope.my_date.getTime()/1000) 提交,在python 端只需读取unix 时间戳。

      解释一下:getTime() 返回一个以毫秒为单位的 unix 时间戳,或者自此以来的毫秒数:

      1970 年 1 月 1 日 00:00:00 UTC

      我加粗了最后一点,因为它很重要。创建 unix 时间戳时,您所在的时区并不重要,它始终是 UTC。每种能正确处理 unix 时间戳的编程语言和工具都会在时间戳中读取为 UTC,并在内部转换为本地/正确的时区。

      所以不要试图解析日期字符串使事情复杂化 - 只需使用时间戳 - 它是通用的。

      唯一的问题是删除毫秒的转换(/1000Math.floor)。

      【讨论】:

      • 谢谢,但您没有理解问题。我知道时间是UTC。我想将时区信息与 unix 时间戳一起传递给服务器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多