【问题标题】:NodeJs and MySQL timestampNodeJs 和 MySQL 时间戳
【发布时间】:2023-03-27 09:46:02
【问题描述】:

我需要创建一份报告,生成一份按日期细分的教师和访问实验室的学生列表。

但目前我正在使用 getTime 函数添加签入和签出时间,并将该时间保存为 MySQL 中的 VARCHAR,因为我在 MySQL 中的时间戳存在问题,并且每次签入/签出都是它自己的行。我还担心我将无法使用这些数据来正确生成报告。

当某人签入一行时,我如何才能创建它,当他们稍后签出时,他们的前一行会使用当前日期时间更新为 checkOut?

// Checking In/Out users
router.post("/checkin", (req, res) => {

const id = req.body.create_id
const firstName = req.body.create_first_name
const lastName = req.body.create_last_name
const checkIn = getDateTime();
const checkOut = getDateTime();

console.log("Checking In...")
console.log("ID: " + req.body.create_id)
console.log("First Name: " + req.body.create_first_name)
console.log("Last Name: " + req.body.create_last_name)
console.log(checkIn)
console.log(checkOut)

// Checking Student In
    if(req.body.person === "Student" && req.body.checkInOut === "checkIn") {
      queryString = "INSERT INTO students ( student_id ,firstName, lastName, checkIn) VALUES(?, ?, ?, ?)"

      getConnection().query(queryString, [id, firstName, lastName, checkIn], (err, rows, fields) => {
        // If error occures 
        if(err) {
          console.log("Failed to check in new user: " + err)
          res.sendStatus(500)
          return
        }
        console.log("Checked in new user with id: ", id)
      })
    }

    // Checking Student Out
    else if(req.body.person === "Student" && req.body.checkInOut === "checkOut") {
      queryString = "INSERT INTO students ( student_id ,firstName, lastName, checkOut) VALUES(?, ?, ?, ?)"

      getConnection().query(queryString, [id, firstName, lastName, checkOut], (err, rows, fields) => {
        // If error occures 
        if(err) {
          console.log("Failed to check out new user: " + err)
          res.sendStatus(500)
          return
        }
        console.log("Checked out user with id: ", id)
      })
    }

【问题讨论】:

    标签: javascript mysql node.js ejs


    【解决方案1】:

    你也可以创建表格

    CREATE TABLE `students` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(128) NOT NULL DEFAULT '',
      `is_checkout` boolean NOT NULL DEFAULT FALSE,
      `last_name` varchar(128) NOT NULL DEFAULT '',
      `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
    

    当用户签入时你只创建一行,mysql的current_timestamp会记录当前日期时间 当用户结帐时,您会通过 id where student.is_checkout = false 找到学生并将列 is_checkout 更新为 true,届时 updated_at 将记录结帐日期的当前时间戳

    【讨论】:

    • 非常感谢,我会在实施后对其进行编辑。
    • 我搞定了。我怎样才能在 html 中显示我的 MySQL 数据?
    • 可以使用moment js解析成字符串或者从服务器解析成字符串返回给客户端
    • 我现在显示了 MySQL 数据,如果我需要进行一些更改,我会考虑它。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多