【问题标题】:To clear up some doubts about moment.js解开对 moment.js 的一些疑惑
【发布时间】:2017-03-18 17:03:29
【问题描述】:

由于对 moment.js 的一些疑问,我陷入了我的项目中。我将在这里陈述我在编写项目后端时得出的一些结论,如果有问题,请有人纠正我吗?

例如,如果我从前端获取日期时间字符串,格式为: “THU 18 MAR 2017 09:20 AM”,我应该创建将这个字符串传递给它的时刻对象和相应的标记“ddd DD MMM YYYY HH:mm A”,因为传递的字符串不是标准的 ISO 8601 格式。

var datetime = moment(datetimeFromFrontend, "ddd DD MMM YYYY HH:mm A");

现在我有了可以按照我想要的方式格式化的时刻对象,在时刻对象上调用 format() 函数。 如果我想对日期时间进行一些操作(例如,与今天的日期时间进行比较,或仅比较时间部分),是否必须将所有操作的日期时间、时间或其他任何内容转换为具有相同格式的时刻对象并使用 isBefore、isEqual 和等等,或者我可以使用 >、

如果我需要比较(>、

以及如何将 DATETIME 或 TIME 类型的列保存到 SQL 数据库中?应该使用 format() 将时刻对象转换为字符串吗? SQL 会自动将传递的字符串转换为对应的数据类型?

例子:

var now = moment();

我假设“现在”不能直接传递给 sql 查询,因为它是时刻对象,它应该转换为字符串(并依赖 SQL 自动从字符串/nvarchar 转换为日期时间)或者我应该将它保存为moment().toDate()?

【问题讨论】:

标签: javascript datetime momentjs


【解决方案1】:

如果我需要比较(>、

您可能需要查找相关文档 您有 Query functions 可以比较时刻甚至日期对象,例如,这是 .after 函数的条目

moment().isAfter(Moment|String|Number|Date|Array);

如您所见,您可以将任何内容传递给.isAfter,它会为您完成这项工作

moment().isAfter(new Date(2017, 2, 4))
// true
moment(new Date(2016, 2, 4)).isAfter(new Date(2017, 2, 4))
// false

当然,比较 >、Date::getTime 获取时间戳,但那是丑陋的代码

以及如何将 DATETIME 或 TIME 类型的列保存到 SQL 数据库中?应该使用 format() 将时刻对象转换为字符串吗? SQL 会自动将传递的字符串转换为对应的数据类型?

我认为这取决于你的 SQL 是如何工作的以及你的服务器如何与它通信,ORACLE,你应该参考任何关于在你的 sql 中存储日期对象的文档,最终日期和格式都是关于使 unix-timestamps 人类可读/可理解的.

我假设“现在”不能直接传递给 sql 查询,因为它是时刻对象,它应该转换为字符串(并依赖 SQL 自动从字符串/nvarchar 转换为日期时间)或者我应该将它保存为时刻().toDate()?

问问你自己,你或任何可能使用你 API 的人将从你的数据库中获取不可知的 Date 对象而不是简单的严格格式化的字符串获得什么好处?

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2022-01-21
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多