You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:36:04