如何在JavaScript中为已有日期添加当前时间并生成ISO字符串?
解决方案:给日期添加当前时间并转PostgreSQL兼容格式
有两种常用方式可以实现需求,一种在JavaScript端处理,另一种直接在PostgreSQL层面操作,按需选择即可:
方法一:JavaScript端处理
方式1:修改日期对象的时间部分
先创建目标日期对象,再将当前时间的时、分、秒、毫秒赋值给它,最后转换为PostgreSQL支持的格式:
const targetDate = new Date('2022-03-15'); const now = new Date(); // 设置当前时间的时分秒毫秒 targetDate.setHours(now.getHours()); targetDate.setMinutes(now.getMinutes()); targetDate.setSeconds(now.getSeconds()); targetDate.setMilliseconds(now.getMilliseconds()); // 转换为兼容格式:替换ISO字符串里的T为空格,补全微秒位(JS仅支持毫秒精度,补三个0即可) const formattedDate = targetDate.toISOString().replace('T', ' ').slice(0, 23) + '000'; console.log(formattedDate); // 输出类似 "2022-03-15 09:36:54.292000"
方式2:字符串拼接
直接将日期字符串和当前时间字符串拼接,逻辑更直观:
const dateStr = '2022-03-15'; const now = new Date(); // 提取补零后的时分秒和毫秒 const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); const seconds = now.getSeconds().toString().padStart(2, '0'); const milliseconds = now.getMilliseconds().toString().padStart(3, '0'); // 拼接成目标格式 const formattedDate = `${dateStr} ${hours}:${minutes}:${seconds}.${milliseconds}000`; console.log(formattedDate); // 输出类似 "2022-03-15 09:36:54.292000"
方法二:PostgreSQL数据库端处理
如果导入数据时直接在SQL里处理会更省心,无需在JS中做格式转换,利用PostgreSQL内置函数即可:
-- 假设导入的日期字段为date_col,更新updatedAt列 UPDATE your_table SET "updatedAt" = CAST(date_col AS DATE) + CURRENT_TIMESTAMP::TIME WHERE ...;
CAST(date_col AS DATE)将字符串转成日期类型,CURRENT_TIMESTAMP::TIME获取带微秒的当前时间部分,两者相加就能得到符合要求的完整时间戳。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

