# 数据库

# 日期对象

# 腾讯云和阿里云云函数的差异

腾讯云和阿里云在日期处理方面的差异主要体现在对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控制台的差异

同为日期对象,在web控制台腾讯云和阿里云展示的格式并不一致。以上述代码中的dateObj字段为例

腾讯云会展示为如下格式:

{
	"dateObj": {
		"$date":1656424298294
	}
}

阿里云会展示为如下格式:

{
	"dateObj": "2022-07-01T03:17:39.226Z" // 阿里云在web控制台展示为字符串,但实际底层存储的是日期对象
}

# clientDB

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