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)' %> ```

不知道除此之外大家都用什么方法?

9 回复

当然可以!以下是关于如何在 Node.js 中使用 EJS 模板引擎进行日期格式化的详细解答。

标题

Nodejs ejs模板显示日期格式化问题

内容

在网上没有找到很多解决方案,后来我参考了 EJS 的文档,并通过其 filter 功能实现了我的需求。下面是我的代码示例:

JavaScript 代码

首先,我们需要安装 moment 库,它可以帮助我们更方便地处理日期和时间。你可以使用以下命令安装:

npm install moment

然后,在你的 Node.js 文件中引入 momentejs,并定义一个过滤器 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)' %>

解释

  1. 引入库:确保安装并引入了 moment 库。
  2. 注册过滤器:创建一个名为 dateformat 的过滤器,该过滤器接受两个参数:日期对象和格式字符串。
  3. 处理无效日期:如果输入的日期无效(例如 null 或非日期类型),则返回默认的 '0000-00-00 00:00:00' 字符串。
  4. 使用过滤器:在 EJS 模板中,通过管道符号 | 使用这个过滤器,并传入需要的日期格式。

这样,你可以方便地在 EJS 模板中格式化日期,而不需要在每一个地方都写相同的代码。

回到顶部