如何在 Node.js 中将字符串日期更改为时间戳?

Posted

技术标签:

【中文标题】如何在 Node.js 中将字符串日期更改为时间戳?【英文标题】:How to change the String date to TimeStamp in Node.js? 【发布时间】:2021-11-18 05:59:00 【问题描述】:

以下是在我的 REST API 中运行的 Node.js 代码。它从数据库中获取数据并返回给调用者应用程序。

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);
    //log.console("id",id);

    // allows for using callbacks as finish/error-handlers
    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 
        var response = 
          "statusCode": 200,
          "headers": 
            "Content-Type": "application/json"
          ,
          "body": JSON.stringify(result),
          "isBase64Encoded": false
        ;
        callback(null, response)
      
    );
  
;

这给出了以下输出。这是一个JSON Array

[
    
        "iduser": 2,
        "first_name": "John",
        "last_name": "Vector",
        "profile_picture": "https://link",
        "email": "john@test.com",
        "phone": "0000000000",
        "is_disabled": 0,
        "created_date": "2021-07-28T00:00:00.000Z",
        "last_updated": "2021-07-28T00:00:00.000Z",
        "uid": "2"
    
]

调用方应用接受created_datelast_updated 字段作为时间戳,因此字段数据类型需要为int。供您参考,调用方应用是 Flutter 应用,其 model 类如下所示。

import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';

    @JsonSerializable()
    class User 
      int? idUser;
      String? uid;
      String? firstName;
      String? lastName;
      String? profilePicture;
      String? email;
      String? phone;
      int? isDisabled;
      int? createdDate;
      int? lastUpdated;
    
      User(
          this.idUser,
          this.uid,
          this.firstName,
          this.lastName,
          this.profilePicture,
          this.email,
          this.isDisabled,
          this.createdDate,
          this.lastUpdated,
          this.phone);
    
      factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
    
      Map<String, dynamic> toJson() => _$UserToJson(this);
    

我的问题是,从我的 Node.JS 代码中,如何仅将 created_datelast_updated 更改为类型为 int 的 TimeStamp 才能返回相同的结果?

【问题讨论】:

你的 MySQL 查询中的 UNIX_TIMESTAMP 方法有帮助吗? @rosh-dev:介意给我举个例子吗? 从用户中选择 UNIX_TIMESTAMP(created_date),UNIX_TIMESTAMP(last_updated)。此查询以 int 形式返回日期时间。但是在颤振方面有一个问题。如果您希望我可以在答案部分展示我在 nodejs 和颤振之间处理日期时间的方式。但在我的模型类中,我使用日期时间(不是 int)。 【参考方案1】:

如果我不了解您的需求,请原谅,但您为什么不简单地获取这种公认的日期格式的时间?

new Date("2021-07-28T00:00:00.000Z").getTime()

看起来不错。

【讨论】:

这个应用在哪里? JS 还是 Flutter? > 我的问题是,从我的 Node.JS 代码中,如何仅将 created_date 和 last_updated 更改为 int 类型的 TimeStamp 才能返回相同的结果?您建议您可以控制 JS 部分,这是一种通过示例实现目标的方法。 @ssc-hrep3 甚至给你一个完整的js函数:)【参考方案2】:

您可以映射您的 JSON 数组并将日期转换为时间戳。

const convertToTimestamp = function (date) 
  return new Date(date).getTime()


const reformattedOutput = array.map((item) => 
  return 
    ...item,
    "created_date": convertToTimestamp(item.created_date),
    "last_updated": convertToTimestamp(item.last_updated)
  
)

【讨论】:

在哪里转换JSON数组?在我的应用中还是在 REST API 中? 您可以在使用输出之前编写它。如果您多次调用此 API,您可以使用挂钩或中间件,具体取决于您使用的框架。【参考方案3】:

MySQL 是一个基于字符串的协议。如果您想始终将日期字符串转换为其他内容,可以使用 typeCast 并有条件地更改值。

这是我刚刚found的类型转换示例:

const db = mysql.createConnection(
    typeCast: function (field, next) 
        if (field.type == 'DATE') 
            return field.string();
        
        return next();
    
)

【讨论】:

谢谢。但我真的不清楚如何将其应用于我的情况。仅供参考,我不是 JS 人。您能否通过展示如何将其应用于我的代码来提供帮助?

以上是关于如何在 Node.js 中将字符串日期更改为时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

在 Hive 中将字符串转换为日期/时间戳

在 Python 中将 datetime 更改为 Unix 时间戳

如何在 sqlalchemy 查询中将日期时间更改为字符串? [复制]

在 Pyspark 中将字符串更改为时间戳

如何在tableview中将JSON字符串更改为日期格式

如何将字符串时间戳更改为人类可读的日期格式? [复制]