message: Monitoring: Silence form: Fix end time for now + duration case
  The silence was being created with an end time that was calculated based
  on the last render time, not the save time, so it was typically off by a
  few seconds.
diff: @@ -1261,11 +1261,6 @@ const formatDate = (d: Date): string =>
  d.getMinutes(),
  )}:${pad(d.getSeconds())}`;
  -const toISODate = (dateStr: string): string => {
  - const timestamp = Date.parse(dateStr);
  - return isNaN(timestamp) ? undefined : new Date(timestamp).toISOString();
  -};
  -
  const DatetimeTextInput = (props) => {
  const pattern =
  '\\d{4}/(0?[1-9]|1[012])/(0?[1-9]|[12]\\d|3[01]) (0?\\d|1\\d|2[0-3]):[0-5]\\d(:[0-5]\\d)?';
  @@ -1276,7 +1271,7 @@ const DatetimeTextInput = (props) => {
  <Tooltip
  content={[
  <span className="co-nowrap" key="co-timestamp">
  - {isValid ? toISODate(props.value) : 'Invalid date / time'}
  + {isValid ? new Date(props.value).toISOString() : 'Invalid date / time'}
  </span>,
  ]}
  >
  @@ -1360,13 +1355,19 @@ const SilenceForm_: React.FC<SilenceFormProps> = ({ defaults, Info, title }) =>
  setInProgress(true);
  + const saveStartsAt: Date = isStartNow ? new Date() : new Date(startsAt);
  + const saveEndsAt: Date =
  + duration === durationOff
  + ? new Date(endsAt)
  + : new Date(saveStartsAt.getTime() + parsePrometheusDuration(duration));
  +
  const body = {
  comment,
  createdBy,
  - endsAt: toISODate(duration === durationOff ? endsAt : durationEnd),
  + endsAt: saveEndsAt.toISOString(),
  id: defaults.id,
  matchers,
  - startsAt: toISODate(isStartNow ? formatDate(new Date()) : startsAt),
  + startsAt: saveStartsAt.toISOString(),
  };
  coFetchJSON
  