javascript - 初始化日期时间值同时避免代码重复的最佳实践
问题描述
我有许多调度任务函数,它们依赖于我项目中日期时间值的许多便利变量,例如想象 10 + 行这样的:
let today = moment(),
yesterday = moment().subtract(1, 'days'),
startOfToday = moment(today).startOf("day"),
endOfToday = moment(today).endOf("day");
我不能将这种初始化代码放在 myCode.js 文件的顶部,因为它会导致错误——myCode.js 中的函数将引用过时的日期时间。例如,今天总是指节点服务器启动的日期时间。
现在我正在初始化每个函数中的日期,但这会导致代码重复。
有没有更清洁的方法来做到这一点?
我正在考虑的选项:
a) 创建一个初始化所有常用日期的函数,并在函数顶部调用它。
b)内联 moment.js 日期时间值并完全摆脱便利变量(有效但使代码更难阅读)。
提示赞赏,
谢谢,
-S。阿罗拉
解决方案
一种方法是创建一个util
包含所有这些便利方法的模块,然后您可以将其导入您需要的任何文件中。
由于您的输出始终是日期,因此您可以使用一种getDate
方法来接受字符串:
getDate('yesterday')
getDate('endOfToday')
这样,您尝试执行的操作非常易读,并且在该 utils 模块中,您可以简单地使用一个 switch 语句,该语句基于返回正确日期输出的字符串:
switch(dateString) {
case 'today':
return moment()
case 'yesterday':
return moment().subtract(1, 'days')
...
}
如果你不喜欢传递(虽然 moment 经常这样做),你可以在 ES6strings
中创建一个冻结类来模拟枚举并传递/使用它。
您还可以创建一个具有这些的单例类并使用它……主要思想是有一种方法可以返回日期……工厂模式。
推荐阅读
- django-models - 序列化器不会返回模型中的所有值
- python - 根据分隔符从抓取的网页中拆分数据框列
- amazon-web-services - 获取“x-amzn-Remapped-WWW-Authenticate 而不是 WWW-Authenticate 和码头客户端无法识别
- javascript - Javascript中的碰撞检测算法
- javascript - 在expressJS中循环app.get内部或外部的数组?
- r - dplyr loop filtering re *
- onchange - 关于odoo8中onchange方法返回域或警告
- flutter - 当按下按钮时 TextFormField 出现错误时,小部件向下移动
- ios - 居中的 UITextField 文本在编辑时意外移动
- asp.net-core - 在 Asp Core 中使用 IFormFile