Node-PostgreSQL 时间格式

Node-PostgreSQL time format

我的 Postgres 数据库中有两个 table 用户名和 card_info 名。我创建了一个用于注册新用户的端点,并提供了一个名为 dateCreated 的字段,如下面的代码所示。

Register.js

 const handleRegister=(req,res,db,bcrypt,saltRounds)=>{
    const {name,phno,dob,email,username,password,aadharCard}=req.body;
    if(!name || !email|| !phno || !dob || !username || !password || !aadharCard){
        return res.status(400).json('Wrong Form Submission');
    }
    
    const hash=bcrypt.hashSync(password,saltRounds);
    const accNo=Math.floor(2E9+Math.random()*1E9);
    const dateCreated=new Date().toJSON().slice(0,10);

    db('users')
        .insert({
            username:username,
            name:name,
            email:email,
            password:hash,
            dob:dob,
            phno:phno,
            aadhar:aadharCard,
            acc_no:accNo,
            created_date:dateCreated
        })
        .returning('*')
        .then(users=>{
            res.json(users[0]);
        })
        .catch(err=>res.status(400).json("Unable to register"));
    }
    module.exports={
        handleRegister:handleRegister
    }

在卡片端点中,我选择用户创建的年份,其 ID 作为请求发送。然后,我使用计算值将这些值存储到 card_info table 中。到期日期应该比 created_year 多 4 年。 table 用户的 id 是 table card_info

的外键

Card.js

const genCard=(req,res,db)=>{
    const {id,cardType} =req.body;
    
    db.select('created_date').from('users').where("id","=",id)
        .then(data=>{
            const createdDate=data[0].created_date.toString();
            db('card_info')
            .insert({
                card_number:Math.floor(Math.random()*1E17),
                owner_id:id,
                expiration_date: createdDate.replace(parseInt(createdDate),parseInt(createdDate)+4),
                cvv:Math.floor(Math.random()*1E3),
                card_type:cardType
            })
            .returning('*')
            .then(users=>{
                console.log(res.json(users[0]));
            })
            .catch(err=>res.json(err.message))
        })
        .catch(err=>res.json(err));
}


module.exports={
    genCard
}

这是我收到的错误:“插入到“card_info”(“card_number”、“card_type”、“cvv”、“expiration_date” ", "owner_id") 值 ($1, $2, $3, $4, $5) 返回 * - 无法识别时区 "gmt+0300"。

我尝试了各种日期格式化方法,但似乎没有任何效果。如果有人对此有解决方案,请告诉我。

我会避免所有操纵表示日期的字符串的尝试——这只会导致眼泪,而且通常不会考虑边缘情况。而是直接操纵日期。我会推荐 Luxon,它提供了一个围绕 Date 的久经考验的包装器,并且具有使处理日期更容易的便利功能。

    // convert to DateTime object
    const createdDate = DateTime.fromJSDate(data[0].created_date);

    // add 3 months
    const futureDate = createdDate.plus({months: 3});

    // insert a date object
    db('card_info').insert({
       card_number:Math.floor(Math.random()*1E17),
       ...
       created: futureDate, // or futureDate.toJSDate()
    })

演示:

const {
  DateTime
} = luxon;

// convert a saved date from the DB to DateTime
const dt = DateTime.fromJSDate(new Date());

// add 3 months
const futureDate = dt.plus({
  months: 3
});

console.info(futureDate.toFormat('yyyy-MM-dd'), futureDate.toJSDate());
<script src="https://cdn.jsdelivr.net/npm/luxon@2.0.2/build/global/luxon.min.js"></script>