Because JavaScript is badly designed in general, and Date is one of the wonkiest parts. I recommend using ISO8601 strings and date-fns to wrangle them.
The answer to your specific question, however, lies in here:
Support for ISO 8601 formats differs in that date-only strings (e.g. “1970-01-01”) are treated as UTC, not local.
So your constructor gets midnight zulu, and since your local time zone is three hours behind, you get 2100 the night before the date you expected.