【问题标题】:Convert client date / time string to JSON date / time string using JavaScript使用 JavaScript 将客户端日期/时间字符串转换为 JSON 日期/时间字符串
【发布时间】:2016-05-10 14:24:37
【问题描述】:

我正在尝试使用 JavaScript 和时刻(对于 Django REST API 后端)将表单上的客户端日期/时间字符串转换为 JSON 日期/时间字符串。这是我目前所拥有的:

document.getElementById("dt_tm").value = 
moment(document.getElementById("inp-st").value, "DD/MM/YYYY HH:mm").toJSON();

这有两个问题:

  1. 日期格式不能硬编码,因为客户端可能有不同的日期格式,
  2. moment 调整日期/时间,我不需要它来执行此操作,因为后端执行该功能(使用 Django 时区)。

例如:

moment("14/05/2016 18:00", "DD/MM/YYYY HH:mm").toJSON() =
"2016-05-14T17:00:00.000Z"

当我需要的是:

"2016-05-14T18:00"

(在此示例中,我的时区当前为 GMT+1。)

【问题讨论】:

  • JSON.stringify(new Date())"2016-05-10T14:27:19.698Z" 如果那是你的追求
  • JSON.stringify 似乎与 toJSON 做同样的事情。
  • “不能硬编码”是什么意思?由于必须以字符串形式发送格式,因此不必对格式进行硬编码吗?
  • 我的意思是在美国时,客户端的“DD/MM/YYYY”需要更改为“MM/DD/YYYY”。
  • JSON 日期字符串应包含区域信息,否则转换为日期对象会出错

标签: javascript json django datetime


【解决方案1】:

如果您希望 toJSON 以不同的格式返回日期,请将 moment.fn.toJSON 重新定义为它以您的自定义格式而不是默认的 ISO8601 日期格式返回。这在documentation 中有概述。

moment.fn.toJSON = function() { 
    return this.format("YYYY-MM-DDTHH:mmZ"); 
};

【讨论】:

  • 这解决了我的主要问题。虽然我在客户端切换到美国日期格式还是有问题,但我还是给你打勾了。
  • 我认为格式的末尾应该有一个“Z”!
  • 好的,我改了。我不知道那到底是做什么的。关于美国日期格式,您可以只使用 if 语句来表示“如果用户来自美国,则使用其他格式”
  • 如果您想进行语言环境检测,您可能对this question 感兴趣。
  • “Z”确保时区信息被保留。
猜你喜欢
  • 2016-05-03
  • 2015-09-17
  • 2012-06-04
  • 2017-07-29
  • 1970-01-01
  • 2022-08-18
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多