Node.js怎么处理数据库中日期类型

Node.js怎么处理数据库中日期类型

我在MySql数据库中的日期是timestamp类型,可是查询出来显示在页面上之后就变成了: Fri May 17 2013 14:12:33 GMT+0800 (中国标准时间)
这种格式,实际上数据库中显示的是: 2013-01-18 14:19:26
能不能把页面上也显示这种格式啊,不要上面那种格式,敬请各位指教,

13 回复

当然可以!在Node.js中处理MySQL数据库中的日期类型时,我们可以通过一些简单的步骤将日期转换为所需的格式。下面是一个详细的示例代码,展示如何从MySQL数据库中读取日期,并将其格式化为YYYY-MM-DD HH:MM:SS的格式。

示例代码

首先,确保你已经安装了mysql模块。如果还没有安装,可以通过以下命令进行安装:

npm install mysql

接下来,我们编写一个简单的Node.js脚本来连接到MySQL数据库并获取日期数据,然后将其格式化为所需的格式。

const mysql = require('mysql');

// 创建MySQL连接
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'your_username',
    password: 'your_password',
    database: 'your_database'
});

// 连接到数据库
connection.connect((err) => {
    if (err) throw err;
    console.log('Connected to MySQL database!');
    
    // 执行查询
    connection.query('SELECT * FROM your_table', (error, results, fields) => {
        if (error) throw error;

        // 处理结果
        results.forEach(result => {
            const date = result.your_date_column; // 假设你的日期列名为`your_date_column`
            
            // 格式化日期
            const formattedDate = formatDate(date);
            console.log(formattedDate);
        });

        // 关闭连接
        connection.end();
    });
});

// 定义一个函数来格式化日期
function formatDate(dateString) {
    const date = new Date(dateString);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

解释

  1. 创建MySQL连接:使用mysql.createConnection方法创建一个连接对象,并设置必要的参数(如主机名、用户名、密码和数据库名称)。
  2. 连接到数据库:通过调用connection.connect方法连接到MySQL数据库。
  3. 执行查询:使用connection.query方法执行SQL查询,获取表中的所有记录。
  4. 处理结果:遍历查询结果,提取日期列的数据,并调用formatDate函数将其格式化为所需的格式。
  5. 关闭连接:查询完成后,调用connection.end()方法关闭数据库连接。
  6. 格式化日期formatDate函数接受一个日期字符串,解析成JavaScript Date对象,并格式化为YYYY-MM-DD HH:MM:SS的格式。

通过这种方式,你可以确保从MySQL数据库中读取的日期数据在页面上显示为你希望的格式。


自己format

用moment 想怎么显示都可以。。

我会先将时间转为unix存入数据库, 在页面以Moment.js或其他方法格式化

推荐 moment

moment().format('MMMM Do YYYY, h:mm:ss a');
受教

我的数据库里,时间存储的是string类型。先写好格式,然后存入。

Date.prototype.format = function(fmt){
var o = {
    "M+" : this.getMonth()+1,                 //月份
    "d+" : this.getDate(),                    //日
    "h+" : this.getHours(),                   //小时
    "m+" : this.getMinutes(),                 //分
    "s+" : this.getSeconds(),                 //秒
    "q+" : Math.floor((this.getMonth()+3)/3), //季度
    "S"  : this.getMilliseconds()             //毫秒
};

if(/(y+)/.test(fmt))
    fmt=fmt.replace(RegExp.$1, (this.getFullYear().toString()).substr(4 - RegExp.$1.length));
for(var k in o)
    if(new RegExp("("+ k +")").test(fmt))
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
return fmt;

};

我是用date-utils

谢谢大家了,大家给了各种不同的方式,其实我用了另外一种方式,既然我使用的是MySql,那么MySql应该提供的有相应的函数,所以我用的是MySql提供的函数,直接转换,拿出来就可以用了,也不用使用额外的js了,方法如下:

date_format(article_date+’’, ‘%Y-%m-%d %H:%m:%S’) as date;

这样就转换为我要的格式了! 不过还是谢谢大家

以我的php和node开发经验来看 关于日期时间 还是存储为时间戳的整数形式比较好 有的时候做一些 时间比较 或是时间查询(比如最近三个月的记录) 用时间戳显然要快一点 格式化还是交给客户端吧 感觉格式化后的数据对开发人员 没有什么实际意义 在mysql中DateTime 还要比Int多占一些空间(仅供参考)

不用那么麻烦吧,在connection的参数那里加一个 dateStrings: true , 就可以了吧,我是datetime类型的,测试了可以

对于你的问题,你需要在将日期数据从MySQL数据库读取到Node.js应用后进行格式化。通常,这可以通过使用JavaScript的日期处理库(如moment.jsdate-fns)来完成。

下面是一个使用moment.js库进行日期格式化的简单示例:

示例代码

首先,安装moment.js库:

npm install moment

然后,在你的Node.js代码中使用它:

const mysql = require('mysql');
const moment = require('moment');

// 创建数据库连接
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'your_username',
    password: 'your_password',
    database: 'your_database'
});

connection.connect();

// 执行查询
connection.query('SELECT timestamp_column FROM your_table', function (error, results, fields) {
    if (error) throw error;

    // 处理查询结果
    results.forEach(result => {
        const originalDate = result.timestamp_column;
        const formattedDate = moment(originalDate).format('YYYY-MM-DD HH:mm:ss');
        
        console.log(formattedDate);
    });
});

connection.end();

解释

  1. 引入依赖:我们引入了mysqlmoment库。
  2. 创建数据库连接:使用mysql.createConnection方法创建一个数据库连接。
  3. 执行查询:使用connection.query方法执行SQL查询。
  4. 格式化日期:在结果中,我们将从数据库中获取的原始日期通过moment库转换为指定格式(这里是'YYYY-MM-DD HH:mm:ss')。

注意事项

确保在生产环境中处理好数据库连接的错误和关闭逻辑,避免潜在的安全隐患。

如果你不想使用第三方库,也可以直接使用JavaScript内置的Date对象来实现格式化,但可能会更复杂一些。

回到顶部