当用户在 angular 中键入年份字段时,angular 中的日期字段将月份减 1
Date field in angular reducing month by 1 when user keying in year field in angular
我在 HTML
中定义了一个日期字段
<input type="date" name="" (change)="handleBlur($event)" min="1970-01-01" max="9999-12-31"
value="{{ somedate| date:'yyyy-MM-dd' }}">
并且在 ts 文件中我正在处理 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 个国家/地区非常有效,但在其他国家/地区则不然。我的意思是用户可以从日历控件中选择一个日期,也可以输入一个日期值。但是,当用户使用来自美国地区的相同工具时,此控件的行为会很奇怪。当年份改变时,每键入一次,日减一,而当用户改变日时,月份减一。我不知道如何解决它或导致问题的原因。
JavaScript 日期对象有一个时间部分。 new Date(...)
将创建一个新的 Date 对象,时间为用户当前时区的 'now'。将该日期对象转换为 ISO 字符串时,它将标准化时间组件,这可能会导致日期本身发生变化。
例如,假设我 select 2022 年 4 月 2 日正好在 12:30am 时区 GMT+1 上午。在此日期对象上调用 .toISOString()
时,它将转换为 GMT+0 的 11:30pm 2022 年 4 月 1 日。这也可能在接近午夜的时间发生相反的情况。
为避免这种情况,您可以根据日期对象上的日、月和年手动创建 ISO 字符串,或者您可以请求图书馆帮助您完成此操作。有几个库可以帮助管理日期,例如 momentjs、Day.js、date-fns 等
我在 HTML
中定义了一个日期字段<input type="date" name="" (change)="handleBlur($event)" min="1970-01-01" max="9999-12-31"
value="{{ somedate| date:'yyyy-MM-dd' }}">
并且在 ts 文件中我正在处理 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 个国家/地区非常有效,但在其他国家/地区则不然。我的意思是用户可以从日历控件中选择一个日期,也可以输入一个日期值。但是,当用户使用来自美国地区的相同工具时,此控件的行为会很奇怪。当年份改变时,每键入一次,日减一,而当用户改变日时,月份减一。我不知道如何解决它或导致问题的原因。
JavaScript 日期对象有一个时间部分。 new Date(...)
将创建一个新的 Date 对象,时间为用户当前时区的 'now'。将该日期对象转换为 ISO 字符串时,它将标准化时间组件,这可能会导致日期本身发生变化。
例如,假设我 select 2022 年 4 月 2 日正好在 12:30am 时区 GMT+1 上午。在此日期对象上调用 .toISOString()
时,它将转换为 GMT+0 的 11:30pm 2022 年 4 月 1 日。这也可能在接近午夜的时间发生相反的情况。
为避免这种情况,您可以根据日期对象上的日、月和年手动创建 ISO 字符串,或者您可以请求图书馆帮助您完成此操作。有几个库可以帮助管理日期,例如 momentjs、Day.js、date-fns 等