由于对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();
我认为"现在"不能直接传递给sql查询,因为它是时刻对象,它应该转换为字符串(并依赖于SQL自动从字符串/ nvarchar转换为datetime),还是应该将其保存为moment().toDate()
?< / p>
答案 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对象而不仅仅是纯粹严格格式化的字符串,从而获得什么样的好处?