Nodejs ejs模板显示日期格式化问题
Nodejs ejs模板显示日期格式化问题
在网上没搜到什么解法, 后来参考ejs的文档, 通过它的filter功能实现我要的效果。代码如下:
var moment = require('moment');
var ejs = require('ejs');
ejs.filters.dateformat = function(obj, format) {
if (format == undefined) {
format = 'YYYY-MM-DD HH:mm:ss';
}
var ret = moment(obj).format(format);
return ret == 'Invalid date' ? '0000-00-00 00:00:00' : ret;
}; ```
ejs代码:
``` <%=: m.getShowDate | dateformat:'YYYY-MM-DD HH:mm:ss (Z)' %> ```
不知道除此之外大家都用什么方法?
当然可以!以下是关于如何在 Node.js 中使用 EJS 模板引擎进行日期格式化的详细解答。
标题
Nodejs ejs模板显示日期格式化问题
内容
在网上没有找到很多解决方案,后来我参考了 EJS 的文档,并通过其 filter
功能实现了我的需求。下面是我的代码示例:
JavaScript 代码
首先,我们需要安装 moment
库,它可以帮助我们更方便地处理日期和时间。你可以使用以下命令安装:
npm install moment
然后,在你的 Node.js 文件中引入 moment
和 ejs
,并定义一个过滤器 dateformat
:
var moment = require('moment');
var ejs = require('ejs');
// 定义一个日期格式化过滤器
ejs.filters.dateformat = function(obj, format) {
// 如果没有指定格式,默认使用 'YYYY-MM-DD HH:mm:ss'
if (format == undefined) {
format = 'YYYY-MM-DD HH:mm:ss';
}
// 使用 moment 进行日期格式化
var ret = moment(obj).format(format);
// 如果解析的日期无效,则返回默认值 '0000-00-00 00:00:00'
return ret == 'Invalid date' ? '0000-00-00 00:00:00' : ret;
};
EJS 代码
在 EJS 模板文件中,我们可以使用上述定义的 dateformat
过滤器来格式化日期:
<!DOCTYPE html>
<html>
<head>
<title>Date Format Example</title>
</head>
<body>
<!-- 使用 dateformat 过滤器格式化日期 -->
<%= m.getShowDate | dateformat:'YYYY-MM-DD HH:mm:ss (Z)' %>
</body>
</html>
在这个例子中,m.getShowDate
是你从后端传递给 EJS 模板的一个日期对象或字符串。通过使用 | dateformat:'YYYY-MM-DD HH:mm:ss (Z)'
,我们将该日期格式化为指定的格式。
其他方法
除了使用 moment
库之外,你还可以使用原生的 JavaScript 方法来处理日期格式化。例如,可以使用 Intl.DateTimeFormat
对象:
ejs.filters.dateformat = function(date, format) {
var options = {};
if (format.includes('YYYY')) options.year = 'numeric';
if (format.includes('MM')) options.month = '2-digit';
if (format.includes('DD')) options.day = '2-digit';
if (format.includes('HH')) options.hour = '2-digit';
if (format.includes('mm')) options.minute = '2-digit';
if (format.includes('ss')) options.second = '2-digit';
return new Intl.DateTimeFormat('en-US', options).format(new Date(date));
};
这样,你就可以根据需要选择合适的方法来处理日期格式化问题。希望这些信息对你有帮助!
utils.js
exports.dateFormat = function (date) {
return moment(date).format('YYYY年MM月DD日hh:mm:ss dddd');
}
app.js
app.locals.dateFormat = utils.dateFormat;
学习
楼主我用你的方法报错了 不知道啥原因呀!
调用个moment.js插件。
你把问题都看错误了。 另外,你要遵循“低耦合高内聚”。
HTML和模板引擎的作用就是输出字符串,你给模板的任何东西都应该建立在字符串基础上。 想要日期,应该在外界格式化完成,然后发送给模板。
moment 就可以
一楼好评
你已经提供了一个有效的解决方案,使用 EJS 的自定义 filter 来格式化日期。这里我再补充一下这段代码,并且稍微修改一下,以确保它更清晰和健壮。
示例代码
首先,确保你安装了 moment
库:
npm install moment
然后,在你的 Node.js 文件中引入并注册 dateformat
过滤器:
var moment = require('moment');
var ejs = require('ejs');
// 注册自定义的 dateformat 过滤器
ejs.filters.dateformat = function(date, format) {
if (!moment(date).isValid()) {
return '0000-00-00 00:00:00';
}
return moment(date).format(format || 'YYYY-MM-DD HH:mm:ss');
};
接下来,在 EJS 模板中使用这个过滤器:
<%= m.getShowDate | dateformat:'YYYY-MM-DD HH:mm:ss (Z)' %>
解释
- 引入库:确保安装并引入了
moment
库。 - 注册过滤器:创建一个名为
dateformat
的过滤器,该过滤器接受两个参数:日期对象和格式字符串。 - 处理无效日期:如果输入的日期无效(例如
null
或非日期类型),则返回默认的'0000-00-00 00:00:00'
字符串。 - 使用过滤器:在 EJS 模板中,通过管道符号
|
使用这个过滤器,并传入需要的日期格式。
这样,你可以方便地在 EJS 模板中格式化日期,而不需要在每一个地方都写相同的代码。