Hacker News new | past | comments | ask | show | jobs | submit login

Months in Luxon are 1-indexed instead of 0-indexed like in Moment and the native Date type.

This seems like a bold decision and terrifying source of errors for those of us with decades of experience thinking January is 0.




OTOH, as somebody who doesn't do much date stuff JS/moment's months are a constant source of bugs.


I think that moment.js was already built that way. For me it kinda makes sense: if days are calculated with a 1-index in mind, why make months different? As I said: it KINDA makes sense.


No, they're 0-indexed in Moment. But yes, the reason I made Luxon 1-index them is that days and years are 1-indexed. I also fielded a lot of issues in Moment that were caused by newer programmers not knowing that months were 0-indexed.


Good stuff.


I'm not defending the difference between how months and days/years are treated. But here are some possible reasons.

From ctime(3):

    Broken-down time is stored in the structure tm, which is defined in <time.h> as follows:

        struct tm {
            int tm_sec;    /* Seconds (0-60) */
            int tm_min;    /* Minutes (0-59) */
            int tm_hour;   /* Hours (0-23) */
            int tm_mday;   /* Day of the month (1-31) */
            int tm_mon;    /* Month (0-11) */
            int tm_year;   /* Year - 1900 */
            int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
            int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
            int tm_isdst;  /* Daylight saving time */
        };
Also, it allows you to do things like

    ["JAN", "FEB", ..., "DEC"][theDate.month]


Well, nobody is confused when their digital watch reads "00:00:00" as the ball drops on New Years Eve. But if the date was 2018-00-01 people would be like "WTF??"


ISO 8601 say January is 01


Jeez, to think I've been using base 10 this whole time!


As explained on the website, that's why this is Luxon and not moment 3.0. It's a great approach for them to take that allows them to experiment, grow, and relieve the pressure from calls for change, without disrupting the existing community.


No, Javascript is the terrifying source of errors here.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: