简体中文
腾讯云和阿里云在日期处理方面的差异主要体现在对ISOString格式的日期字符串(例:2022-07-01T02:50:11.142Z
)入库时。腾讯云在入库时不会进行特殊处理,会以字符串形式存储此字符串,阿里云会将此格式字符串转为日期对象存储。以下代码比较容易理解此问题
// 云函数代码
'use strict';
const db = uniCloud.database()
function getType(val) {
return Object.prototype.toString.call(val).slice(8, -1).toLowerCase()
}
exports.main = async (event, context) => {
const addRes = await db.collection('date-test').add({
dateStr: '2022-07-01T02:50:11.142Z',
dateObj: new Date()
})
const getRes = await db.collection('date-test').doc(addRes.id).get()
const {
dateStr,
dateObj
} = getRes.data[0]
console.log(getType(dateStr)) // 腾讯云:string,阿里云:date
console.log(getType(dateObj)) // 腾讯云:date,阿里云:date
return {}
};
同为日期对象,在web控制台腾讯云和阿里云展示的格式并不一致。以上述代码中的dateObj字段为例
腾讯云会展示为如下格式:
{
"dateObj": {
"$date":1656424298294
}
}
阿里云会展示为如下格式:
{
"dateObj": "2022-07-01T03:17:39.226Z" // 阿里云在web控制台展示为字符串,但实际底层存储的是日期对象
}
clientDB在存储日期字符串及日期对象时和使用的云厂商表现一致。但是在取出日期对象时会得到ISOString格式的字符串
// 客户端代码
const db = uniCloud.database()
async function test() {
const getRes = await db.collection('date-test').get()
const dateObj = getRes.result.data[0].dateObj // "2022-07-01T03:17:39.226Z"
}
test()
阿里云、腾讯云nodejs8在云函数return之后其余逻辑会被冻结不再执行。腾讯云nodejs12表现恰好相反,云函数return之后还会等待其余逻辑执行后才会将此云函数实例空闲出来。详情见:keepRunningAfterReturn