-1

I have this basic function to convert my unix timestamps into a date string. I have seen that it returns the wrong month (29-10 instead of 29-11). I was able to reproduce it on JsFiddle. What could be the problem?

  function unixTime(unixtime) {
      var u = new Date(unixtime*1000);
        return u.getUTCFullYear() +
          '-' + ('0' + u.getUTCMonth()).slice(-2) +
          '-' + ('0' + u.getUTCDate()).slice(-2)
        //  ' ' + ('0' + u.getUTCHours()).slice(-2) +
      //    ':' + ('0' + u.getUTCMinutes()).slice(-2) +
        //  ':' + ('0' + u.getUTCSeconds()).slice(-2)
      }
      
      var test = unixTime(1638178329);
      
      console.log(test);

https://jsfiddle.net/e2h7p19k/8/

TeaAt5
  • 63
  • 4
  • 1
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth: _"The getUTCMonth() returns the month of the specified date according to universal time, as a zero-based value (**where zero indicates the first month of the year**)."_ – CBroe Nov 29 '21 at 09:40
  • 1
    Does this answer your question? [Why does the month argument range from 0 to 11 in JavaScript's Date constructor?](https://stackoverflow.com/questions/2552483/why-does-the-month-argument-range-from-0-to-11-in-javascripts-date-constructor) – CBroe Nov 29 '21 at 09:40

1 Answers1

0

You can use Date.toLocaleDateString() to format strings in the desired format. Selecting a locale of 'sv' will give you ISO dates and selecting the 'UTC' timeZone will give the correct timezone.

function unixTime(unixtime) {
    return new Date(unixtime * 1000).toLocaleDateString('sv', { timeZone: 'UTC'})
}

console.log(unixTime(1638178329))
console.log(unixTime(Date.parse('2021-05-04')/1000))
console.log(unixTime(Date.parse('2015-12-25')/1000))
.as-console-wrapper { max-height: 100% !important; top: 0; }
Terry Lennox
  • 29,471
  • 5
  • 28
  • 40