NestJS中如何将00:39:41格式的时间字符串转为Date类型?
在NestJS中实现时间字符串到Date类型的转换
原代码
@Cron('23 16 * * *') async transferData() { try { // 从AttendanceBulk表获取数据 const attendanceBulkData = await this.AttendanceBulkModel.findAll(); for (const data of attendanceBulkData) { const attendance = new Attendance(); // 根据data.UserId查找对应的AttendanceAndBulk记录 const attendanceAndBulk = await AttendanceAndBulk.findOne({ where: { UserId: data.UserId } }); if (attendanceAndBulk) { attendance.employeeId = attendanceAndBulk.employeeId; attendance.shiftType = data.Intime ? ShiftType.In : ShiftType.Out; attendance.time = new Date(`${data.Intime}`);; attendance.date = data.Date; attendance.outTime= data.Date; console.log(data.Intime) await attendance.save(); } } this.logger.log('数据传输完成。'); } catch (error) { this.logger.error('数据传输失败:', error); } }
问题说明
上述代码中,data.Intime是00:39:41格式的时分秒字符串,直接通过new Date(${data.Intime})生成Date对象会得到无效值,需要将该字符串与data.Date(已为Date类型)的日期部分结合,生成正确的Date类型值赋值给attendance.time。
解决方案
方法一:拼接完整时间字符串(原生实现)
利用data.Date的日期部分,与data.Intime拼接成标准ISO格式字符串,再生成Date对象:
// 提取data.Date的YYYY-MM-DD部分 const datePart = data.Date.toISOString().split('T')[0]; // 拼接成完整的ISO时间字符串 const fullTimeString = `${datePart}T${data.Intime}`; // 生成正确的Date对象 attendance.time = new Date(fullTimeString);
方法二:直接修改Date对象的时分秒(原生实现)
复制data.Date的日期,手动设置时分秒:
// 拆分时分秒为数字 const [hours, minutes, seconds] = data.Intime.split(':').map(Number); // 基于data.Date创建新的Date对象 const targetDate = new Date(data.Date); // 设置时分秒 targetDate.setHours(hours); targetDate.setMinutes(minutes); targetDate.setSeconds(seconds); attendance.time = targetDate;
方法三:使用日期处理库(如moment/date-fns)
如果项目已引入日期处理库,可简化操作:
Moment.js示例:
import * as moment from 'moment'; attendance.time = moment(data.Date) .set('hour', parseInt(data.Intime.split(':')[0], 10)) .set('minute', parseInt(data.Intime.split(':')[1], 10)) .set('second', parseInt(data.Intime.split(':')[2], 10)) .toDate();
date-fns示例:
import { setHours, setMinutes, setSeconds } from 'date-fns'; const [hours, minutes, seconds] = data.Intime.split(':').map(Number); attendance.time = setSeconds( setMinutes( setHours(new Date(data.Date), hours), minutes ), seconds );
内容的提问来源于stack exchange,提问作者Nadula
相关产品推荐
相关产品推荐

