View Raw SPL
/*****************************************************************************
*                                                                            *
*   YEARS2DAYS.SPL Copyright (C) 2024 DSP Development Corporation            *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:        Randy Race                                                *
*                                                                            *
*   Synopsis:      Converts years to days                                    *
*                                                                            *
*   Revisions:      2 Dec 2024  RRR  Creation                                *
*                                                                            *
*****************************************************************************/


#if @HELP_YEARS2DAYS

    YEARS2DAYS

    Purpose: Converts years to days.

    Syntax:  YEARS2DAYS(years)

              years - A scalar or series, the years values.


    Returns: A scalar or series of day values.

    Example:
             years2days(3)

             returns 1095, the number of days in 3 years.

    Example:
             days2years(years2days(3))

             returns 3 years showing days2years and years2days are inverse
             functions.

    Example:
             W1: 0..0.2..1
             W2: years2days(w1)
             W3: days2years(w2)

             W1 contains the years series {0, 0.2, 0.4, 0.6, 0.8, 1.0}.

             W2 contains the day series {0, 73, 146, 219, 292, 365}.

             W3 recovers the original years series.

    Remarks:
             YEARS2DAYS converts a year value or series to days.

             YEARS2DAYS assumes that a leap year can occur four years after
             the first full year.

             See DAYS2YEARS to convert a day value or series to years.

    See Also:
             DAYS2YEARS
             YEARS2MINUTES
             YEARS2HOURS
             YEARS2SECONDS
#endif


/* convert years to days */
years2days(years = 0)
{
        local centuries, rem_years, century_days, leap_years, non_leap_years, year_days, days;

        centuries = int(years / 100);
        rem_years = years % 100;

        /* days from centuries */
        century_days = centuries * 36524.25;

        /* days from remaining years, accounting for leap years */
        leap_years = int(rem_years / 4) - int(rem_years / 100);
        non_leap_years = rem_years - leap_years;
        year_days = non_leap_years * 365 + leap_years * 366;

        days = century_days + year_days;

        if (isarray(days))
        {
                setvunits(days, "Days", -1);
        }

        return(days);
}