Nodejs 里时间怎么格式化?

Nodejs 里时间怎么格式化?

存数据库的时候可以格式化成 1980-01-02 … 这样的吗?

如果取出的时候 是在get路由的时候格式化,还是在views模版里格式化呢?

9 回复

Node.js 中时间格式化

在 Node.js 中处理时间格式化是一个常见的需求,尤其是在与数据库交互或在前端展示数据时。本文将介绍如何在 Node.js 中进行时间格式化,并提供一些示例代码。

如何格式化时间?

在 Node.js 中,你可以使用内置的 Date 对象来获取当前日期和时间,然后通过多种方式对其进行格式化。以下是几种常用的方法:

  1. 使用内置 Date 对象

    const date = new Date();
    console.log(date.toISOString()); // 输出类似于 "2023-10-04T15:30:00.000Z" 的格式
    
  2. 使用第三方库 moment.js(已不再维护) 虽然 moment.js 已经不再维护,但在旧项目中仍然可能看到它的使用。

    const moment = require('moment');
    const formattedDate = moment().format('YYYY-MM-DD');
    console.log(formattedDate); // 输出类似于 "2023-10-04" 的格式
    
  3. 使用现代库 date-fns date-fns 是一个更现代化的时间处理库,推荐使用。

    const { format } = require('date-fns');
    const formattedDate = format(new Date(), 'yyyy-MM-dd');
    console.log(formattedDate); // 输出类似于 "2023-10-04" 的格式
    
  4. 自定义函数 如果你需要更复杂的格式化逻辑,可以编写自己的函数。

    function formatDate(date) {
      return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
    }
    const date = new Date();
    console.log(formatDate(date)); // 输出类似于 "2023-10-04" 的格式
    

存储和显示时间

在存储时间到数据库时,通常建议将时间存储为 ISO 8601 格式(例如 2023-10-04T15:30:00.000Z),这有利于数据库查询和时间计算。

存储到数据库

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const eventSchema = new Schema({
  name: String,
  date: { type: Date, default: Date.now }
});

const Event = mongoose.model('Event', eventSchema);

// 创建新事件
const newEvent = new Event({ name: 'My Event' });
newEvent.save((err, event) => {
  if (err) return console.error(err);
  console.log(event.date.toISOString());
});

在 GET 路由或视图模板中格式化 你可以在 GET 路由处理函数中格式化时间,也可以在视图模板中直接格式化。

GET 路由中格式化

app.get('/event/:id', async (req, res) => {
  const eventId = req.params.id;
  const event = await Event.findById(eventId);
  const formattedDate = format(event.date, 'yyyy-MM-dd');
  res.send(`Event date: ${formattedDate}`);
});

视图模板中格式化 如果你使用的是 EJS 模板引擎:

<!-- 在 EJS 模板中 -->
<% event.forEach(e => { %>
  <div><%= format(e.date, 'yyyy-MM-dd') %></div>
<% }) %>

总结来说,在 Node.js 中格式化时间可以通过多种方法实现,选择合适的方法取决于你的具体需求和项目环境。


按 JS 的 API 手动拼这个字符串或者用 moment 模块

什么时候格式化?存入的时候还是读取的时候?

2nd 用 moment 模块

存入的时候最好保持原值,取出来用的时候再格式化。

moment靠谱

试试sugarjs看

多谢!

在 Node.js 中,时间格式化是一个常见的需求。你可以使用 JavaScript 的内置方法或者第三方库来实现。以下是几种常见的时间格式化方法:

使用 JavaScript 内置方法

存储时格式化时间

如果你希望在存储到数据库之前将时间格式化为 YYYY-MM-DD 格式,可以这样做:

const date = new Date();
const formattedDate = date.toISOString().split('T')[0];
console.log(formattedDate); // 输出类似于 "1980-01-02"

这里使用了 toISOString() 方法将日期转换为 ISO 8601 格式(例如 "1980-01-02T00:00:00.000Z"),然后通过字符串分割获取日期部分。

在 GET 路由中格式化时间

如果你需要在 GET 请求处理过程中对时间进行格式化,可以直接在路由处理函数中操作:

app.get('/some-route', (req, res) => {
    const date = new Date(); // 获取当前时间
    const formattedDate = date.toISOString().split('T')[0]; // 格式化日期
    res.send({ date: formattedDate });
});

在 Views 模板中格式化时间

如果你使用的是模板引擎如 EJS、Pug 或者 Handlebars,可以在模板中直接格式化时间。以 EJS 为例:

<!-- views/some-template.ejs -->
<%= new Date().toISOString().split('T')[0] %>

使用第三方库

对于更复杂的格式化需求,推荐使用第三方库如 moment.jsdate-fns。这些库提供了更强大和灵活的日期处理功能。

安装 date-fns

npm install date-fns

示例代码

const { format } = require('date-fns');

const date = new Date();
const formattedDate = format(date, 'yyyy-MM-dd');
console.log(formattedDate); // 输出类似于 "1980-01-02"

总结来说,你可以根据具体需求选择合适的格式化方法,在存储、GET 路由处理或模板渲染时进行时间格式化。

回到顶部