Converting Excel Date Serial Number to Date using Javascript

后端 未结 9 1342
终归单人心
终归单人心 2020-11-29 02:22

I have the following javascript code that convert date (string) to the Date Serial Number used in Microsoft Excel:

function JSDateToExcelDate(inDate) {

             


        
9条回答
  •  -上瘾入骨i
    2020-11-29 02:50

    No need to do any math to get it down to one line.

    // serialDate is whole number of days since Dec 30, 1899
    // offsetUTC is -(24 - your timezone offset)
    function SerialDateToJSDate(serialDate, offsetUTC) {
      return new Date(Date.UTC(0, 0, serialDate, offsetUTC));
    }
    

    I'm in PST which is UTC-0700 so I used offsetUTC = -17 to get 00:00 as the time (24 - 7 = 17).

    This is also useful if you are reading dates out of Google Sheets in serial format. The documentation suggests that the serial can have a decimal to express part of a day:

    Instructs date, time, datetime, and duration fields to be output as doubles in "serial number" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.

    So, if you want to support a serial number with a decimal, you'd need to separate it out.

    function SerialDateToJSDate(serialDate) {
      var days = Math.floor(serialDate);
      var hours = Math.floor((serialDate % 1) * 24);
      var minutes = Math.floor((((serialDate % 1) * 24) - hours) * 60)
      return new Date(Date.UTC(0, 0, serialDate, hours-17, minutes));
    }
    

提交回复
热议问题