3

I'm getting an error using moment-timezone with America/Sao_Paulo trying to parse date with America/Sao_Paulo offset. I've created this code:

const date = "2019-1-1 23:30";
const format = "YYYY-M-D HH:mm";
const timezone = "America/Sao_Paulo";
const dateMoment = moment.tz(date, format, timezone);

The output of dateMoment is 2019-01-01T23:30:00-02:00 but I expect 2019-01-01T23:30:00-03:00, since America/Sao_Paulo has offset -03:00.

Am I missing something or did I initialize dateMoment wrong?

const date = "2019-1-1 23:30";
const format = "YYYY-M-D HH:mm";
const timezone = "America/Sao_Paulo";
const dateMoment = moment.tz(date, format, timezone);

console.log(dateMoment.format());
console.log(moment.tz(timezone).format('Z'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script type="text/javascript" src="http://momentjs.com/downloads/moment-timezone-with-data.js"></script>
Pedro Arantes
  • 5,113
  • 5
  • 25
  • 60
  • 2
    The output is correct, see [Sao Paulo DST Changes](https://www.timeanddate.com/time/change/brazil/sao-paulo), the offset in June is `-03:00` while the offset is `-02:00` in January. – VincenzoC Jun 10 '19 at 13:32
  • This has been fixed in moment/timezone 0.5.27 build. Upgrade your moment-timezone lib/js to see the effect. https://github.com/moment/moment-timezone/tree/develop/builds – Dnyaneshwar Harer Jan 30 '20 at 06:34

1 Answers1

4

On January 1st 2019, Sao Paulo was still on Summer Time. It was UTC-2 until February 17th.

Brazil abolished summer time going forward, but that hadn't taken effect yet.

Matt Johnson-Pint
  • 230,703
  • 74
  • 448
  • 575