Node.js如何将字符串格式日期转为int类型TimeStamp适配Flutter应用
解法
方案1:Node.js业务层转换(无需修改SQL)
在查询拿到数据库返回结果后、序列化返回前,遍历结果集转换两个日期字段为时间戳即可,完整修改后的代码如下:
const mysql = require('mysql2'); const errorCodes = require('source/error-codes'); const PropertiesReader = require('properties-reader'); const prop = PropertiesReader('properties.properties'); const con = mysql.createConnection({ host: prop.get('server.host'), user: prop.get("server.username"), password: prop.get("server.password"), port: prop.get("server.port"), database: prop.get("server.dbname") }); exports.getUserByID = (event, context, callback) => { const params = event.queryStringParameters; if (!params || params.id == null) { context.callbackWaitsForEmptyEventLoop = false; var response = errorCodes.missing_parameters; callback(null, response) } else { const { id } = event.queryStringParameters; console.log("id", id); context.callbackWaitsForEmptyEventLoop = false; const sql = "select * from user where iduser = ?"; con.execute(sql, [id], function (err, result) { if (err) { console.log(err); var response = errorCodes.internal_server_error; callback(null, response); } else { // 新增转换逻辑 const processedResult = result.map(userItem => { return { ...userItem, // 此处生成13位毫秒级时间戳,如果需要10位秒级时间戳,改为 Math.floor(new Date(userItem.created_date).getTime() / 1000) created_date: new Date(userItem.created_date).getTime(), last_updated: new Date(userItem.last_updated).getTime() } }) var response = { "statusCode": 200, "headers": { "Content-Type": "application/json" }, // 替换原result为转换后的processedResult "body": JSON.stringify(processedResult), "isBase64Encoded": false }; callback(null, response) } }); } };
- 精度说明:如果和Flutter端约定的是10位秒级时间戳,把转换逻辑里的
getTime()改为Math.floor(new Date(xxx).getTime()/1000)即可,和MySQL的UNIX_TIMESTAMP函数输出一致。
方案2:SQL层面直接转换(无需修改业务代码)
直接修改查询SQL,用MySQL内置函数把日期字段转为时间戳返回,修改后的SQL如下:
SELECT iduser, first_name, last_name, profile_picture, email, phone, is_disabled, uid, UNIX_TIMESTAMP(created_date) AS created_date, UNIX_TIMESTAMP(last_updated) AS last_updated FROM user WHERE iduser = ?
此方案返回的是10位秒级整数时间戳,不需要在Node.js层做额外处理。
注意事项
请和Flutter端对齐时间戳精度:
- 13位毫秒级时间戳对应Flutter
DateTime.fromMillisecondsSinceEpoch() - 10位秒级时间戳对应Flutter
DateTime.fromSecondsSinceEpoch()
内容的提问来源于stack exchange,提问作者PeakGen
相关产品推荐
相关产品推荐

