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>
我的 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>