0

I know that you can set defaultvalues inside useForm hook and reset it by reset() from 'react-hook-form'. But I'm not able to set value and min attribute to new Date() so that each time when form opens, there is updated value.

For simplicity, assume there is input text field and I set defaultvalue to new Date(), I expected to see current date every time I open form, but it doesn't get updated. Below is example of what I'm trying to do:


import....
let timeValue = new Date();
let minValue = timeValue.setMinutes(timeValue.getMinutes() + 30);

const {
    register,
    handleSubmit,
    reset
  } = useForm({
    defaultValues: {
      date: timeValue.toISOString().slice(0,16),
    },
  });

const onSubmit = data => {
  console.log(data);
  reset();
};

<form onSubmit={handleSubmit(onSubmit)}>
  <label htmlFor="date">Date
    <input
      type="datetime-local"
      id="deadline"
      {...register("due", { required: true, min: {value: minValue.toISOString().slice(0,16), message: 'Deadline cannot be set in the past.'} })}
    />
  </label>
</form>

1 Answers1

0

My code looks very similar to yours

except the default value is on my input, and I'm using substring instead of slice

<input defaultValue={new Date().toISOString().substring(0, 16)}/>

Be mindful that this might be incorrect due to timezone offset

I used this solution to remedy that javascript toISOString() ignores timezone offset