Annotation of embedaddon/php/ext/calendar/sdncal.h, revision 1.1

1.1     ! misho       1: #ifndef SDNCAL_H
        !             2: #define SDNCAL_H
        !             3: /*
        !             4:  * This code has been modified for use with PHP
        !             5:  * by Shane Caraveo shane@caraveo.com
        !             6:  * see below for more details
        !             7:  *
        !             8:  */
        !             9: 
        !            10: /* $selId: sdncal.h,v 2.0 1995/10/24 01:13:06 lees Exp $
        !            11:  * Copyright 1993-1995, Scott E. Lee, all rights reserved.
        !            12:  * Permission granted to use, copy, modify, distribute and sell so long as
        !            13:  * the above copyright and this permission statement are retained in all
        !            14:  * copies.  THERE IS NO WARRANTY - USE AT YOUR OWN RISK.
        !            15:  */
        !            16: 
        !            17: /**************************************************************************
        !            18:  *
        !            19:  * This package defines a set of routines that convert calendar dates to
        !            20:  * and from a serial day number (SDN).  The SDN is a serial numbering of
        !            21:  * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and
        !            22:  * SDN 2447893 is January 1, 1990.  This system of day numbering is
        !            23:  * sometimes referred to as Julian days, but to avoid confusion with the
        !            24:  * Julian calendar, it is referred to as serial day numbers here.  The term
        !            25:  * Julian days is also used to mean the number of days since the beginning
        !            26:  * of the current year.
        !            27:  *
        !            28:  * The SDN can be used as an intermediate step in converting from one
        !            29:  * calendar system to another (such as Gregorian to Jewish).  It can also
        !            30:  * be used for date computations such as easily comparing two dates,
        !            31:  * determining the day of the week, finding the date of yesterday or
        !            32:  * calculating the number of days between two dates.
        !            33:  *
        !            34:  * When using this software on 16 bit systems, be careful to store SDNs in
        !            35:  * a long int, because it will not fit in the 16 bits that some systems
        !            36:  * allocate to an int.
        !            37:  *
        !            38:  * For each calendar, there are two routines provided.  One converts dates
        !            39:  * in that calendar to SDN and the other converts SDN to calendar dates.
        !            40:  * The routines are named SdnTo<CALENDAR>() and <CALENDAR>ToSdn(), where
        !            41:  * <CALENDAR> is the name of the calendar system.
        !            42:  *
        !            43:  * SDN values less than one are not supported.  If a conversion routine
        !            44:  * returns an SDN of zero, this means that the date given is either invalid
        !            45:  * or is outside the supported range for that calendar.
        !            46:  *
        !            47:  * At least some validity checks are performed on input dates.  For
        !            48:  * example, a negative month number will result in the return of zero for
        !            49:  * the SDN.  A returned SDN greater than one does not necessarily mean that
        !            50:  * the input date was valid.  To determine if the date is valid, convert it
        !            51:  * to SDN, and if the SDN is greater than zero, convert it back to a date
        !            52:  * and compare to the original.  For example:
        !            53:  *
        !            54:  *    int y1, m1, d1;
        !            55:  *    int y2, m2, d2;
        !            56:  *    long int sdn;
        !            57:  *    ...
        !            58:  *    sdn = GregorianToSdn(y1, m1, d1);
        !            59:  *    if (sdn > 0) {
        !            60:  *        SdnToGregorian(sdn, &y2, &m2, &d2);
        !            61:  *        if (y1 == y2 && m1 == m2 && d1 == d2) {
        !            62:  *            ... date is valid ...
        !            63:  *        }
        !            64:  *    }
        !            65:  *
        !            66:  **************************************************************************/
        !            67: 
        !            68: /* Gregorian calendar conversions. */
        !            69: void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay);
        !            70: long int GregorianToSdn(int year, int month, int day);
        !            71: extern char *MonthNameShort[13];
        !            72: extern char *MonthNameLong[13];
        !            73: 
        !            74: /* Julian calendar conversions. */
        !            75: void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay);
        !            76: long int JulianToSdn(int year, int month, int day);
        !            77: 
        !            78: /* Jewish calendar conversions. */
        !            79: void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay);
        !            80: long int JewishToSdn(int year, int month, int day);
        !            81: extern char *JewishMonthName[14];
        !            82: extern char *JewishMonthHebName[14];
        !            83: 
        !            84: /* French republic calendar conversions. */
        !            85: void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay);
        !            86: long int FrenchToSdn(int inputYear, int inputMonth, int inputDay);
        !            87: extern char *FrenchMonthName[14];
        !            88: 
        !            89: /* Islamic calendar conversions. */
        !            90: /* Not implemented yet. */
        !            91: 
        !            92: /* Day of week conversion.  0=Sunday, 6=Saturday */
        !            93: int DayOfWeek(long int sdn);
        !            94: extern char *DayNameShort[7];
        !            95: extern char *DayNameLong[7];
        !            96: 
        !            97: #endif /* SDNCAL_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>