TypeScript中如何从字符串类型的日期中减去一天?
解决方案:用Moment.js正确给字符串日期减一天
我来帮你搞定这个问题!你之前的代码没生效,大概率是因为没有正确把减一天后的结果赋值回要使用的变量,或者处理时机不对。下面针对你的两个方法分别给出修改方案:
1. 修改ngOnChanges方法中的endDate处理
原来的代码里,你直接对传入的this.endDate做格式化,现在需要先转成Moment对象、执行减一天操作,再格式化输出。修改后的代码如下:
public ngOnChanges(): void { const startDate = this.startDate ? moment(this.startDate).format() : moment().startOf('day').format(); // 这里修改:如果有传入endDate,先减一天再格式化;否则保持原有逻辑 const endDate = this.endDate ? moment(this.endDate).subtract(1, 'day').format() : moment(startDate).endOf('day').format(); this.datePicker = new DatePicker(startDate, endDate); this.setDatePicker(); if (this.continiousDatesValue !== null) { this.continiousDatesValueMoment = moment(this.continiousDatesValue); } if (this.previousDatesValue !== null) { this.previousDatesValueMoment = moment(this.previousDatesValue); } }
2. 修改onDatesChange方法中的endDate发射逻辑
如果需要在发射endDate之前也执行减一天操作,那要对this.datePicker.endDate做同样的Moment处理,再发射出去:
private onDatesChange(): void { this.startDateChange.emit(this.datePicker.startDate); // 这里修改:对datePicker的endDate先减一天再格式化后发射 const adjustedEndDate = moment(this.datePicker.endDate).subtract(1, 'day').format(); this.endDateChange.emit(adjustedEndDate); this.startEndDateChange.emit({ startDate: this.datePicker.startDate, endDate: adjustedEndDate }); this.isOpen = false; }
关键注意点
- 确保你已经正确安装并导入了Moment.js:
import * as moment from 'moment'; - 如果你的
endDate字符串格式不标准,可能需要在moment()里指定格式,比如moment(this.endDate, 'YYYY-MM-DD'),避免Moment解析出错导致减一天失效 - 如果你后续还要对
datePicker里的日期做其他操作,也可以考虑直接在DatePicker实例中存储Moment对象,而不是格式化后的字符串,这样后续修改会更方便
内容的提问来源于stack exchange,提问作者James Delaney
相关产品推荐
相关产品推荐

