澄清一些关于moment.js的疑虑

时间:2017-03-18 17:03:30

标签: javascript datetime momentjs

由于对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等,或者我可以使用>,<,< =,=<来比较它们。 ?

如果我需要比较(>,< etc)datetime或只是时间部分与从SQL数据库检索的值(DATETIME或TIME数据类型),我应该将两个比较值传递给时刻对象,将它们转换为相同的格式,然后进行操作?

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

示例:

var now = moment();

我认为&#34;现在&#34;不能直接传递给sql查询,因为它是时刻对象,它应该转换为字符串(并依赖于SQL自动从字符串/ nvarchar转换为datetime),还是应该将其保存为moment().toDate()?< / p>

1 个答案:

答案 0 :(得分:0)

  

如果我需要比较(&gt;,&lt; etc)datetime或只是时间部分与从SQL数据库检索的值(DATETIME或TIME数据类型),我应该将两个比较值传递给时刻对象,将它们转换为相同的格式,然后进行操作?

您可能希望为此查找文档 您有Query functions可以比较时刻甚至是Date对象,例如,这是.after函数的条目

  

矩()isAfter(矩|字符串|数|日期|阵列);

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

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

当然,最简单的比较方法是&gt;,&lt;或===是使用Date::getTime获取时间戳,但这是丑陋的代码

  

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

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

  

我认为“now”不能直接传递给sql查询,因为它是时刻对象,它应该转换为字符串(并依赖于SQL自动从字符串/ nvarchar转换为datetime)或者我应该将它保存为moment()。toDate()?

问问自己,您或您可能使用的API会从您的数据库中获取不可知的Date对象而不仅仅是纯粹严格格式化的字符串,从而获得什么样的好处?