Rails的列类型用于moment.js格式化的日期和时间

30 浏览
0 Comments

Rails的列类型用于moment.js格式化的日期和时间

我正在构建一个Rails应用程序,用户可以从日期选择器中选择日期,并从时间选择器中选择时间。日期和时间都使用moment js进行格式化,以以下方式显示日期和时间:

moment().format('LL'); //2017年1月23日
moment().format('LTS'); //下午1:17:54

我阅读了这个回答,其中有关选择适当列类型的指南。

有关Rails列类型的文档吗?

理想情况下,我应该使用:date、:time或:timestamp。但由于日期已经格式化,我应该使用:string吗?

在这种情况下,应该使用哪种正确和适当的列类型?

0
0 Comments

问题的原因是:用户想要将一个格式化的日期和时间存储在Rails的数据库中,但不确定应该使用哪种列类型。

解决方法是:

1. 可以在数据库中使用时间戳列,并将请求解析为Ruby的datetime对象,然后将其存储在datetime列中。

2. 在Postgres中,可以直接将Ruby的DateTime对象保存到postgres的timestamp字段中。

3. 另一种选项是将日期和时间字符串连接成一个字符串,然后可以使用一行代码将其存储到datetime列中。

4. 如果使用MySQL,也可以使用类似的方法。

所以,用户可以选择在数据库中使用timestamp或datetime列来存储格式化的日期和时间。存储日期和时间的格式应该符合数据库的要求,但可以根据需要进行格式化。

参考资料:david grayson的回答。(链接:https://stackoverflow.com/questions/12181444)

希望以上内容对你有所帮助。

0
0 Comments

Rails中用于moment.js格式化日期和时间的列类型

问题的原因:

- 如果要在数据库中存储时间参考,应该使用数据库提供的一种类型。在这里以MySQL为例,但其他数据库服务器的解释类似。

- 如果使用timestamp列,将只使用4个字节的存储空间,这总是一个好消息,因为它可以创建更小的索引,在内部数据库操作期间使用更少的内存等等。然而,timestamp的范围比datetime小,所以只能存储大约从1970年到2038年的值。

- 如果使用datetime,可以使用相同精度(秒)存储更广范围的值(从1001年到9999年)。不好的一面是,更大的范围需要更多的内存,使得速度稍慢。

解决方法:

- 如果应用程序的要求符合timestamp的限制,推荐使用timestamp。

- 否则,使用datetime,但强烈不建议使用varchar。

其他注意事项:

- 如果使用varchar,会强制在每次使用该字段时在文本和datetime之间进行转换。此外,在该列上进行排序或筛选将非常低效,因为数据库将在筛选或排序之前需要将所有字符串转换为日期,这使得无法在该列上使用索引。

- 如果需要亚秒级精度,可以使用bigint来满足要求,因为MySQL没有为此目的提供特定的日期类型。

关于如何在Rails中存储和显示日期:

- 存储日期和显示给用户的方式完全不同。可以使用DateTime.new(year, month, day, hour, minute, second)创建DateTime对象并将其赋值给模型。在保存到数据库时,ActiveRecord将负责将DateTime对象转换为适当的数据库格式。

- 要以特定格式显示已经存储在数据库中的值(在视图、API响应等中),可以参考其他帖子。

文章完毕。

0