How do I convert a decimal year value into a Date in Javascript?

前端 未结 3 1249
无人及你
无人及你 2020-12-21 05:43

OK, this is basically a Javascript version of How can I convert a decimal year value into a Date in Ruby? and not exactly a duplicate of Javascript function to conv

3条回答
  •  旧巷少年郎
    2020-12-21 06:17

    function leapYear (year){
      return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
    }
    
    function getMonthAndDayFromDayOfYear(dayOfYear, year){
      var daysInMonthArray = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
      if (leapYear(year)) { daysInMonthArray[2] = 29; }
    
      var daysLeft = dayOfYear;
      var month = 0;
      for (i=0; i daysInThisMonth) {
          month += 1;
          daysLeft -= daysInThisMonth;
        } else {
          break;
        }
      }
      return { month: month, day: daysLeft };
    }
    
    function convertDecimalDate(decimalDate){
      decimalDate = parseFloat(decimalDate);
      var year = parseInt(decimalDate); // Get just the integer part for the year
      var daysPerYear = leapYear(year) ? 366 : 365; // Set days per year based on leap year or not
      var decimalYear = decimalDate - year; // A decimal representing portion of the year left
      var dayOfYear = Math.ceil(decimalYear * daysPerYear); // day of Year: 1 to 355 (or 366)
      var md = getMonthAndDayFromDayOfYear(dayOfYear, year);
      var day = md['day'];
      var month = md['month'];
      return new Date(year,month,day);
    }
    
    var date = convertDecimalDate(2015.0596924);
    

提交回复
热议问题