diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/calendar/sdncal.h | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/calendar/sdncal.h')
-rw-r--r-- | ext/calendar/sdncal.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/calendar/sdncal.h b/ext/calendar/sdncal.h new file mode 100644 index 0000000..81328d1 --- /dev/null +++ b/ext/calendar/sdncal.h @@ -0,0 +1,97 @@ +#ifndef SDNCAL_H +#define SDNCAL_H +/* + * This code has been modified for use with PHP + * by Shane Caraveo shane@caraveo.com + * see below for more details + * + */ + +/* $selId: sdncal.h,v 2.0 1995/10/24 01:13:06 lees Exp $ + * Copyright 1993-1995, Scott E. Lee, all rights reserved. + * Permission granted to use, copy, modify, distribute and sell so long as + * the above copyright and this permission statement are retained in all + * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. + */ + +/************************************************************************** + * + * This package defines a set of routines that convert calendar dates to + * and from a serial day number (SDN). The SDN is a serial numbering of + * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and + * SDN 2447893 is January 1, 1990. This system of day numbering is + * sometimes referred to as Julian days, but to avoid confusion with the + * Julian calendar, it is referred to as serial day numbers here. The term + * Julian days is also used to mean the number of days since the beginning + * of the current year. + * + * The SDN can be used as an intermediate step in converting from one + * calendar system to another (such as Gregorian to Jewish). It can also + * be used for date computations such as easily comparing two dates, + * determining the day of the week, finding the date of yesterday or + * calculating the number of days between two dates. + * + * When using this software on 16 bit systems, be careful to store SDNs in + * a long int, because it will not fit in the 16 bits that some systems + * allocate to an int. + * + * For each calendar, there are two routines provided. One converts dates + * in that calendar to SDN and the other converts SDN to calendar dates. + * The routines are named SdnTo<CALENDAR>() and <CALENDAR>ToSdn(), where + * <CALENDAR> is the name of the calendar system. + * + * SDN values less than one are not supported. If a conversion routine + * returns an SDN of zero, this means that the date given is either invalid + * or is outside the supported range for that calendar. + * + * At least some validity checks are performed on input dates. For + * example, a negative month number will result in the return of zero for + * the SDN. A returned SDN greater than one does not necessarily mean that + * the input date was valid. To determine if the date is valid, convert it + * to SDN, and if the SDN is greater than zero, convert it back to a date + * and compare to the original. For example: + * + * int y1, m1, d1; + * int y2, m2, d2; + * long int sdn; + * ... + * sdn = GregorianToSdn(y1, m1, d1); + * if (sdn > 0) { + * SdnToGregorian(sdn, &y2, &m2, &d2); + * if (y1 == y2 && m1 == m2 && d1 == d2) { + * ... date is valid ... + * } + * } + * + **************************************************************************/ + +/* Gregorian calendar conversions. */ +void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay); +long int GregorianToSdn(int year, int month, int day); +extern char *MonthNameShort[13]; +extern char *MonthNameLong[13]; + +/* Julian calendar conversions. */ +void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay); +long int JulianToSdn(int year, int month, int day); + +/* Jewish calendar conversions. */ +void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay); +long int JewishToSdn(int year, int month, int day); +extern char *JewishMonthName[14]; +extern char *JewishMonthHebName[14]; + +/* French republic calendar conversions. */ +void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay); +long int FrenchToSdn(int inputYear, int inputMonth, int inputDay); +extern char *FrenchMonthName[14]; + +/* Islamic calendar conversions. */ +/* Not implemented yet. */ + +/* Day of week conversion. 0=Sunday, 6=Saturday */ +int DayOfWeek(long int sdn); +extern char *DayNameShort[7]; +extern char *DayNameLong[7]; + +#endif /* SDNCAL_H */ |