gpt4 book ai didi

javascript - 在 DRF 中使用与 models.DateTimeField 相同的日期/时间格式

转载 作者:行者123 更新时间:2023-11-30 00:28:18 25 4
gpt4 key购买 nike

我有一个带有 start_time 字段的 Build 模型,该字段的类型为 models.DateTimeField。另一方面,我有一个包含此 start_time 字段的 BuildSerializer 类。现在,当我在模板中打印时间戳时,会得到如下结果:

{{ build.start_time|format:'DATETIME_FORMAT' }}

在我的模板中会变成:

April 24, 2015, 8:03 a.m.

然而,序列化器输出不同的值:

2015-04-24T08:03:39.336922Z

这很好,因为它是标准的 JSON 日期表示。但是,我想根据用户的语言环境来显示它,就像我使用上述模板片段时 Django 所做的那样。

我试过

timestamp = serializers.DateTimeField(format=settings.DATETIME_FORMAT)

但是 DRF 使用不同的方式来格式化日期输出,所以这只会输出:

"N j, Y, P"

对于默认的 en-us 语言环境。

有没有办法像 Django 一样格式化日期?我对 python 或 JavaScript 解决方案都感兴趣,因为无论如何我都会在 JS 函数(AJAX 回调)中处理 JSON。

最佳答案

强烈建议您将日期格式设置为 ISO 8601 (这是默认设置)因为它是一种一致且标准化的日期格式,因此您不必太担心在任何地方手动解析日期。大多数语言都可以解析 ISO 8601 日期,而那些默认情况下不能解析的语言通常有可以为您解析的库。

Is there a way to format a date exactly like Django does?

默认情况下,Django REST 框架仅支持使用单个格式化程序格式化与日期相关的字段,默认情况下为 ISO 8601。这是为了一般一致性,因此客户端可以发送 OPTIONS 请求并直接从那里解析日期格式,并依赖于永远不变的日期格式。

可以通过在您的模型上拥有一个属性或覆盖返回值的SerializerMethodField来覆盖此行为,这样它可以在您想要时调用Django的日期格式化实用程序本地化后端的值。或者,您可以覆盖默认的 DateTimeFieldto_native 方法并在那里进行格式化,这样您就可以拥有一个可以跨序列化器使用的字段,因此本地化是一致的.

I’m interested in both a python or a JavaScript solution, as I process the JSON in a JS function (AJAX callback) anyway.

我们用于解析 ISO 8601 次的 JavaScript 解决方案是 Moment.js .虽然一些浏览器可以解析 ISO 8601 次,但并非所有浏览器都可以,而且将它们传递给 Moment 更容易,因此它们可以在 JavaScript Date objects 中转换。 .

// parse the incoming date/time string
var start = moment(response.start_time, moment.ISO_8601);

moment 的第一个参数是要解析的字符串,第二个参数是要解析的格式。 moment.ISO_8601 是一个特殊的钩子(Hook),可以自动将其解析为有效的 ISO 8601 时间,这就是我们使用它的原因。

从那里您可以使用浏览器的日期本地化向用户显示时间的本地化版本。日期对象提供 toLocaleString()toLocaleDateString()toLocaleTimeString() 方法,可用于格式化日期的不同部分(或整个事情)用户的期望如何。

在 Chrome 上本地测试(在 Ubuntu 上,en-US)我得到以下方法的输出

> (new Date()).toLocaleString()
< "6/2/2015, 7:23:03 PM"
> (new Date()).toLocaleDateString()
< "6/2/2015"
> (new Date()).toLocaleTimeString()
< "7:23:12 PM"

这就是我为此浏览器配置日期设置的方式。这具有始终使用系统当前时区的额外好处,因此您无需担心本地化的这一部分 - 它会自动处理。

关于javascript - 在 DRF 中使用与 models.DateTimeField 相同的日期/时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591734/

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