我在HTML中定义了一个日期字段
<input type="date" name="" (change)="handleBlur($event)" min="1970-01-01" max="9999-12-31"
value="{{ somedate| date:'yyyy-MM-dd' }}">
和在它的文件中我正在处理onchange事件
handleBlur(event: any) {
this.somedate= new Date(event.target.value).toISOString()
console.log('after', this.somedate)
this.formobject.controls['somedate'].setValue(this.somedate)
this.appService.updateSaveDataValue({ somedate: this.somedate})
}
这个日期控制在某些X国家很有效,但在其他国家则不然。我的意思是用户可以从日历控件中选择一个日期,也可以输入一个日期值。但是,当用户从美国地区使用相同的工具时,此控件的行为很奇怪。当改变年份时,每输入一个键就减少一天,当用户改变日期时,月就减少一个。我不知道怎么修理,也不知道是什么原因造成的。
Date对象有一个时间组件。new Date(...)
将在用户当前时区创建一个新的Date对象,时间为'now'。当将该日期对象转换为ISO字符串时,它将标准化时间组件,这可能导致日期本身发生变化。
例如,考虑如果我选择日期2022年4月2日正好在GMT+1时区的凌晨12:30。当在此日期对象上调用.toISOString()
时,它将被转换为GMT+0的2022年4月1日晚上11:30。在接近午夜的时候,这种情况也可能反过来发生。
为了避免这种情况,您可以在date对象上手动从日、月和年创建ISO字符串,或者您可以请求一个库来帮助您完成此操作。有几个库可以帮助管理日期,如momentjs, Day.js, date-fns等。