Angular 调用toISOString()thows";ExpressionChangedTerithasBeenCheckedError:表达式在选中后已更改;

Angular 调用toISOString()thows";ExpressionChangedTerithasBeenCheckedError:表达式在选中后已更改;,angular,iso8601,Angular,Iso8601,我在组件中有此方法: getTime():日期{ const date=新日期(); date.setHours(本小时); date.setMinutes(本.minutes); 日期。设置秒(0); 返回日期; } 我称之为另一个: 但是,即使正确生成了字符串(至少JSON是这样的): 我得到了这个错误: CreateGroupComponent.html:40 ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expr

我在组件中有此方法:

getTime():日期{
const date=新日期();
date.setHours(本小时);
date.setMinutes(本.minutes);
日期。设置秒(0);
返回日期;
}
我称之为另一个:


但是,即使正确生成了
字符串(至少JSON是这样的):

我得到了这个错误:

CreateGroupComponent.html:40 ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '2017-11-14T10:30:00.338Z'. Current value: '2017-11-14T10:30:00.341Z'.
    at viewDebugError (core.js:9514)
    at expressionChangedAfterItHasBeenCheckedError (core.js:9492)
    at checkBindingNoChanges (core.js:9661)
    at checkNoChangesNodeInline (core.js:13674)
    at checkNoChangesNode (core.js:13646)
    at debugCheckNoChangesNode (
只有在调用
toISOString()
时,我才会看到此错误。如果我只是返回
Date
对象,这很好,但是将其转换为ISO字符串会给我带来异常。为什么?


谈论
toISOString()
-时区信息在哪里

2017-11-14T10:30:00.271Z
??对我来说,这应该是

2017-11-14T10:30:00.271Z+01:00

这是因为每次调用
getTime
时,毫秒数都会发生变化,这就是错误所说的

应该是:

getTime(): Date {
  const date = new Date();
  date.setHours(this.hour);
  date.setMinutes(this.minute);
  date.setSeconds(0);
  date.setMilliseconds(0);  
  return date;
}
关于时区,各国

方法返回简化的扩展ISO格式(ISO 8601)的字符串。时区始终为零UTC偏移量,由后缀“Z”表示


如果需要本地时间,请参阅以获取可能的解决方案。

这是因为每次
getTime
调用都会更改毫秒数,这就是错误所说的

应该是:

getTime(): Date {
  const date = new Date();
  date.setHours(this.hour);
  date.setMinutes(this.minute);
  date.setSeconds(0);
  date.setMilliseconds(0);  
  return date;
}
关于时区,各国

方法返回简化的扩展ISO格式(ISO 8601)的字符串。时区始终为零UTC偏移量,由后缀“Z”表示


如果需要本地时间,请参阅以获取可能的解决方案。

Btw,为什么ngModel和表单控件同时存在?通常它们是互斥的。顺便问一下,为什么ngModel和表单控件同时存在?通常它们是相互排斥的。