Search code examples
timemomentjsunix-timestamp

Why isn't my Unix time parsing consistently?


My client generates a timestamp using Date.now(), generating a unix time in milliseconds. But when I parse it later on the server, I get a very different date. I can reproduce this discrepancy with Jsfiddle. My code is:

const parseMoment = moment('1603551654605', 'x').format();
const parseDate = new Date(1603551654605).toDateString();

alert(`moment: ${parseMoment}, date: ${parseDate}`);

The output I get is: moment: 2020-11-16T00:00:00+01:00, date: Sat Oct 24 2020

The correct output is what moment gives me here, 11/16. But moment on my server actually gives me the incorrect October date. I need to reliably parse my unix timestamp back to the correct (later) date.


Solution

  • The unix timestamp converts to Saturday, 24 October 2020 15:00:54.605 (GMT)


    momentJS does't require any second parameters while creating a date from milliseconds (DOCS).

    Using the correct conversion, both moment() and new Date() show the same result:

    const parseMoment = moment(1603551654605).format();
    const parseDate = new Date(1603551654605).toDateString()
    
    console.log(`moment\t: ${parseMoment}`);
    console.log(`date\t: ${parseDate}`);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

    moment : 2020-10-24T17:00:54+02:00
    date   : Sat Oct 24 2020