momo            Sun Feb 16 17:28:01 2003 EDT

  Added files:                 
    /php4/ext/standard  sunfuncs.c sunfuncs.h 
    /php4/ext/standard/tests/general_functions  sunfuncts.phpt 
    /php4/ext/standard/tests/time       idate.phpt 

  Modified files:              
    /php4/ext/standard  basic_functions.c config.m4 datetime.c 
                        datetime.h php_standard.h 
  Log:
  @ new idate() function.
  @ new date_sunrise() function.
  @ new date_sunset() function.
  #since i have no premission updating the win32 project file, i'm sending patch on 
the list.
  
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.578 
php4/ext/standard/basic_functions.c:1.579
--- php4/ext/standard/basic_functions.c:1.578   Sat Feb 15 12:18:57 2003
+++ php4/ext/standard/basic_functions.c Sun Feb 16 17:28:00 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.578 2003/02/15 17:18:57 wez Exp $ */
+/* $Id: basic_functions.c,v 1.579 2003/02/16 22:28:00 momo Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -285,6 +285,7 @@
 
        PHP_FE(strtotime,                                                              
                                                 NULL)
        PHP_FE(date,                                                                   
                                                 NULL)
+       PHP_FE(idate,                                                                  
+                                                 NULL)
        PHP_FE(gmdate,                                                                 
                                                 NULL)
        PHP_FE(getdate,                                                                
                                                 NULL)
        PHP_FE(localtime,                                                              
                                                 NULL)
@@ -899,6 +900,8 @@
 
        PHP_FE(output_add_rewrite_var,                                                 
                                 NULL)
        PHP_FE(output_reset_rewrite_vars,                                              
                                 NULL)
+       PHP_FE(date_sunrise,                                                           
+                                                 NULL)
+       PHP_FE(date_sunset,                                                            
+                                                         NULL)
 
        {NULL, NULL, NULL}
 };
@@ -936,6 +939,10 @@
 PHP_INI_BEGIN()
        PHP_INI_ENTRY_EX("safe_mode_protected_env_vars", SAFE_MODE_PROTECTED_ENV_VARS, 
PHP_INI_SYSTEM, OnUpdateSafeModeProtectedEnvVars, NULL)
        PHP_INI_ENTRY_EX("safe_mode_allowed_env_vars",   SAFE_MODE_ALLOWED_ENV_VARS,   
PHP_INI_SYSTEM, OnUpdateSafeModeAllowedEnvVars,   NULL)
+       PHP_INI_ENTRY("date.default_latitude",  DATE_DEFAULT_LATITUDE, PHP_INI_ALL, 
+NULL)
+    PHP_INI_ENTRY("date.default_longitude",  DATE_DEFAULT_LONGITUDE, PHP_INI_ALL, 
+NULL)
+    PHP_INI_ENTRY("date.sunset_zenith",DATE_SUNSET_ZENITH, PHP_INI_ALL, NULL)
+    PHP_INI_ENTRY("date.sunrise_zenith",DATE_SUNRISE_ZENITH, PHP_INI_ALL, NULL)
 PHP_INI_END()
 
 
@@ -1020,6 +1027,10 @@
        REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("INI_ALL",    ZEND_INI_ALL,    CONST_CS | 
CONST_PERSISTENT);
+       
+       REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, 
+CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | 
+CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | 
+CONST_PERSISTENT);
 
 #define REGISTER_MATH_CONSTANT(x)  REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | 
CONST_PERSISTENT)
        REGISTER_MATH_CONSTANT(M_E);
Index: php4/ext/standard/config.m4
diff -u php4/ext/standard/config.m4:1.54 php4/ext/standard/config.m4:1.55
--- php4/ext/standard/config.m4:1.54    Thu Feb 13 20:27:15 2003
+++ php4/ext/standard/config.m4 Sun Feb 16 17:28:00 2003
@@ -1,4 +1,4 @@
-dnl $Id: config.m4,v 1.54 2003/02/14 01:27:15 sniper Exp $ -*- sh -*-
+dnl $Id: config.m4,v 1.55 2003/02/16 22:28:00 momo Exp $ -*- sh -*-
 
 divert(3)dnl
 
@@ -284,6 +284,6 @@
                             incomplete_class.c url_scanner_ex.c ftp_fopen_wrapper.c \
                             http_fopen_wrapper.c php_fopen_wrapper.c credits.c css.c \
                             var_unserializer.c ftok.c aggregation.c sha1.c 
user_filters.c \
-                            filters.c proc_open.c )
+                            filters.c proc_open.c sunfuncs.c)
 
 PHP_ADD_MAKEFILE_FRAGMENT
Index: php4/ext/standard/datetime.c
diff -u php4/ext/standard/datetime.c:1.104 php4/ext/standard/datetime.c:1.105
--- php4/ext/standard/datetime.c:1.104  Sun Feb  9 16:44:51 2003
+++ php4/ext/standard/datetime.c        Sun Feb 16 17:28:00 2003
@@ -19,7 +19,7 @@
  */
 
 
-/* $Id: datetime.c,v 1.104 2003/02/09 21:44:51 k.schroeder Exp $ */
+/* $Id: datetime.c,v 1.105 2003/02/16 22:28:00 momo Exp $ */
 
 
 #include "php.h"
@@ -629,6 +629,146 @@
        php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
 }
 /* }}} */
+
+
+/* {{{ idate */
+int idate(char format, int timestamp, int gm)
+{
+       time_t the_time;
+       struct tm *ta, tmbuf;
+       int h, beat, fd, wd, yd, wk;
+#if !HAVE_TM_GMTOFF
+       long tzone;
+       char *tname[2]= {"GMT Standard Time", "BST"};
+#endif
+       
+       the_time = timestamp;
+
+       if (gm) {
+               ta = php_gmtime_r(&the_time, &tmbuf);
+#if !HAVE_TM_GMTOFF
+               tzone = 0;
+#endif
+       } else {
+               ta = php_localtime_r(&the_time, &tmbuf);
+#if !HAVE_TM_GMTOFF
+#ifdef __CYGWIN__
+               tzone = _timezone;
+#else
+               tzone = timezone;
+#endif
+               tname[0] = tzname[0];
+#endif
+       }
+       
+       switch (format) {
+               case 'U':               /* seconds since the epoch */
+                       return (long)the_time;
+               case 'Y':               /* year, numeric, 4 digits */
+                       return  ta->tm_year + YEAR_BASE;
+               case 'z':               /* day (of the year) */
+                       return ta->tm_yday;
+               case 'y':               /* year, numeric, 2 digits */
+                       return (ta->tm_year)%100;
+               case 'm':               /* month, numeric */
+               case 'n':
+                       return ta->tm_mon + 1;
+               case 'd':               /* day of the month, numeric */
+               case 'j':
+                       return ta->tm_mday;
+               case 'H':               /* hour, numeric, 24 hour format */
+               case 'G':
+                       return ta->tm_hour;
+               case 'h':               /* hour, numeric, 12 hour format */
+               case 'g':
+                       h = ta->tm_hour % 12; if (h==0) h = 12;
+                       return h;
+               case 'i':               /* minutes, numeric */
+                       return ta->tm_min;
+               case 's':               /* seconds, numeric */
+                       return  ta->tm_sec;
+               case 't':               /* days in current month */
+                       return phpday_tab[isleap((ta->tm_year+YEAR_BASE))][ta->tm_mon];
+               case 'w':               /* day of the week, numeric EXTENSION */
+                       return ta->tm_wday;
+               case 'Z':               /* timezone offset in seconds */
+#if HAVE_TM_GMTOFF
+                       return ta->tm_gmtoff;
+#else
+                       return ta->tm_isdst ? -(tzone- 3600) : -tzone;
+#endif
+               case 'L':               /* boolean for leapyear */
+                               return isleap(ta->tm_year+YEAR_BASE)?1:0;
+               case 'B':       /* Swatch Beat a.k.a. Internet Time */
+                       beat =  (((((long)the_time)-(((long)the_time) -
+                               ((((long)the_time) % 86400) + 3600))) * 10) / 864);
+                       while (beat < 0) {
+                               beat += 1000;
+                       }
+                       beat = beat % 1000;
+                       return beat;
+               case 'I':
+                       return ta->tm_isdst;
+               case 'W':               /* ISO-8601 week number of year, weeks 
+starting on Monday */
+                       wd = ta->tm_wday==0 ? 6 : ta->tm_wday-1;/* weekday */
+                       yd = ta->tm_yday + 1;                                   /* 
+days since January 1st */
+                       fd = (7 + wd - yd % 7+ 1) % 7;                  /* weekday 
+(1st January) */                                     /* week is a last year week (52 
+or 53) */
+                       if ((yd <= 7 - fd) && fd > 3){                  
+                               wk = (fd == 4 || (fd == 5 && isleap((ta->tm_year + 
+YEAR_BASE - 1)))) ? 53 : 52;
+                       }
+                       /* week is a next year week (1) */
+                       else if (isleap((ta->tm_year+YEAR_BASE)) + 365 - yd < 3 - wd){
+                               wk = 1;
+                       }
+                       /* normal week */
+                       else {
+                               wk = (yd + 6 - wd + fd) / 7 - (fd > 3);
+                       }
+                       return wk;
+                       break;
+               default:
+                       return 0;
+       }
+       
+}
+/* }}} */
+
+/* {{{ proto int idate(string format [, int timestamp])
+   Format a local time/date as integer */
+PHP_FUNCTION(idate)
+{
+       pval **format, **timestamp;
+       int t, ret;
+
+       switch(ZEND_NUM_ARGS()) {
+       case 1:
+               if (zend_get_parameters_ex(1, &format) == FAILURE) {
+                       WRONG_PARAM_COUNT;
+               }
+               t = time(NULL);
+               break;
+       case 2:
+               if (zend_get_parameters_ex(2, &format, &timestamp) == FAILURE) {
+                       WRONG_PARAM_COUNT;
+               }
+               convert_to_long_ex(timestamp);
+               t = Z_LVAL_PP(timestamp);
+               break;
+       default:
+               WRONG_PARAM_COUNT;
+       }
+       convert_to_string_ex(format);
+       
+       if (Z_STRLEN_PP(format) != 1) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "idate format is one 
+char");
+               RETURN_FALSE;
+       }
+
+       ret = idate(Z_STRVAL_PP(format)[0], t, 0);
+       RETURN_LONG(ret);
+}
+/* }}} */
+
 
 /* {{{ proto string gmdate(string format [, int timestamp])
    Format a GMT/UTC date/time */
Index: php4/ext/standard/datetime.h
diff -u php4/ext/standard/datetime.h:1.11 php4/ext/standard/datetime.h:1.12
--- php4/ext/standard/datetime.h:1.11   Tue Dec 31 11:07:35 2002
+++ php4/ext/standard/datetime.h        Sun Feb 16 17:28:00 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: datetime.h,v 1.11 2002/12/31 16:07:35 sebastian Exp $ */
+/* $Id: datetime.h,v 1.12 2003/02/16 22:28:00 momo Exp $ */
 
 #ifndef DATETIME_H
 #define DATETIME_H
@@ -26,6 +26,7 @@
 PHP_FUNCTION(mktime);
 PHP_FUNCTION(gmmktime);
 PHP_FUNCTION(date);
+PHP_FUNCTION(idate);
 PHP_FUNCTION(gmdate);
 PHP_FUNCTION(localtime);
 PHP_FUNCTION(getdate);
@@ -36,6 +37,7 @@
 #endif
 PHP_FUNCTION(strtotime);
 
+int idate(char format, int timestamp, int gm);
 extern char *php_std_date(time_t t);
 void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm);
 #if HAVE_STRFTIME
Index: php4/ext/standard/php_standard.h
diff -u php4/ext/standard/php_standard.h:1.18 php4/ext/standard/php_standard.h:1.19
--- php4/ext/standard/php_standard.h:1.18       Wed Jan  1 06:04:44 2003
+++ php4/ext/standard/php_standard.h    Sun Feb 16 17:28:00 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_standard.h,v 1.18 2003/01/01 11:04:44 wez Exp $ */
+/* $Id: php_standard.h,v 1.19 2003/02/16 22:28:00 momo Exp $ */
 
 #include "basic_functions.h"
 #include "php_math.h"
@@ -60,6 +60,7 @@
 #include "php_ftok.h"
 #include "php_type.h"
 #include "aggregation.h"
+#include "sunfuncs.h"
 
 #define phpext_standard_ptr basic_functions_module_ptr
 PHP_MINIT_FUNCTION(standard_filters);

Index: php4/ext/standard/sunfuncs.c
+++ php4/ext/standard/sunfuncs.c
/*
        The sun position algorithm taken from the 'US Naval Observatory's
        Almanac for Computers', implemented by Ken Bloom <[EMAIL PROTECTED]>
        for the zmanim project <http://sourceforge.net/projects/zmanim/>
        and finally converted to C by Moshe Doron <[EMAIL PROTECTED]>.
*/

#include <assert.h>
#include <math.h>
#include <stdlib.h>
#include "sunfuncs.h"
#include "php.h"
#include "datetime.h"
#include "php_ini.h"



/* {{{ proto mixed sunrise(mixed time[, int format][, float latitude][, float 
longitude][, float zenith,][ float gmt_offset])
   Returns time of sunrise for a given day & location */
PHP_FUNCTION(date_sunrise)
{
        zval *date;
        double latitude, longitude, zenith, gmt_offset, ret;
        int time, N, retformat;
        char retstr[6];
        

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|ldddd", &date, 
&retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) {
                RETURN_FALSE;
        }
        
        switch(Z_TYPE_P(date)){
                case IS_LONG:
                        time = Z_LVAL_P(date);
                        break;
                case IS_STRING:
                        /* todo: more user friendly format */
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "date must be 
timestamp for now");
                        RETURN_FALSE;
        }
        N = idate('z',time,0)+1;
        
        switch(ZEND_NUM_ARGS()){
                case 1:
                        retformat = SUNFUNCS_RET_STRING;
                case 2:
                        latitude = INI_FLT("date.default_latitude");
                case 3:
                        longitude = INI_FLT("date.default_longitude");
                case 4:
                        zenith = INI_FLT("date.sunrise_zenith");
                case 5:
                        gmt_offset = idate('Z',time,0)/3600;
                default:
                        break;
        }
        
        ret = sunrise(N, latitude, longitude, zenith) + gmt_offset;

        switch(retformat){
                case SUNFUNCS_RET_TIMESTAMP:
                        RETURN_LONG((int)(time-(time%(24*3600)))+(int)(60*ret));
                        break;
                case SUNFUNCS_RET_STRING:
                        N =  (int)ret;
                        sprintf(retstr, "%02d:%02d", N,(int)(60*(ret-(double)N)));
                        RETVAL_STRINGL(retstr, 5, 1);
                        break;
                case SUNFUNCS_RET_DOUBLE:
                        RETURN_DOUBLE(ret);
                        break;
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid format");
                        RETURN_FALSE;
        }
}
/* }}} */

/* returns time in UTC */
double sunrise(long N, double latitude, double longitude, double zenith) {
        
        double lngHour, t, M, L, Lx, RA, RAx, Lquadrant, RAquadrant, sinDec, cosDec, 
cosH, H, T, UT, UTx;

        /* step 1: First calculate the day of the year 
        int N=theday - date(1,1,theday.year()) + 1;
        */
        
        /* step 2: convert the longitude to hour value and calculate an approximate 
time */
        lngHour= longitude / 15;
        
        /* use 18 for sunset instead of 6 */
        t = (double)N + ((6 - lngHour) / 24);

        /* step 3: calculate the sun's mean anomaly */
        M = (0.9856 * t) - 3.289;

        /* step 4: calculate the sun's true longitude */
        L = M + (1.916 * sin(to_rad(M))) + (0.020 * sin (to_rad(2 * M))) + 282.634;
        while (L<0)
        {
                Lx=L+360;
                assert (Lx != L); /* askingtheguru: realy needed? */
                L = Lx;
        }
        while (L>=360)
        {
                Lx=L-360;
                assert (Lx != L); /* askingtheguru: realy needed? */
                L = Lx;
        }

        /* step 5a: calculate the sun's right ascension */
        RA = to_deg(atan (0.91764 * tan(to_rad(L))));

        while (RA<0)
        {
                RAx=RA+360;
                assert (RAx != RA);  /* askingtheguru: realy needed? */
                RA = RAx;
        }
        while (RA>=360)
        {
                RAx=RA-360;
                assert (RAx != RA);  /* askingtheguru: realy needed? */
                RA = RAx;
        }
        
        /* step 5b: right ascension value needs to be in the same quadrant as L */
        Lquadrant = floor(L/90)*90;
        RAquadrant = floor(RA/90)*90;
        RA=RA+(Lquadrant - RAquadrant);

        /* step 5c: right ascension value needs to be converted into hours */
        RA/=15;

        /* step 6: calculate the sun's declination */
        sinDec = 0.39782 * sin(to_rad(L));
        cosDec = cos(asin(sinDec));

        /* step 7a: calculate the sun's local hour angle */
        cosH = (cos(to_rad(zenith)) - (sinDec * sin(to_rad(latitude)))) / (cosDec * 
cos(to_rad(latitude)));

        if (cosH > 1){
                /* throw doesnthappen(); */
        }
        
        /*
        FOR SUNSET use the following instead of the above if statement.
        // if (cosH < -1)
        */

        /* step 7b: finish calculating H and convert into hours */
        H = 360 - to_deg(acos(cosH));

        /* FOR SUNSET remove "360 - " from the above */

        H=H/15;

        /* step 8: calculate local mean time */
        T = H + RA - (0.06571 * t) - 6.622;

        /* step 9: convert to UTC */
        UT = T - lngHour;
    while (UT<0) {
                UTx=UT+24;
                assert (UTx != UT); /* askingtheguru: realy needed? */
                UT = UTx;
        }
        while (UT>=24) {
                UTx=UT-24;
                assert (UTx != UT); /* askingtheguru: realy needed? */
                UT = UTx;
        }
        
        return UT;
}

/* {{{ proto mixed sunset(mixed time[, int format][, float latitude][, float 
longitude][, float zenith,][ float gmt_offset])
   Returns time of sunset for a given day & location */
PHP_FUNCTION(date_sunset)
{
        zval *date;
        double latitude, longitude, zenith, gmt_offset, ret;
        int time, N, retformat;
        char retstr[6];
        

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|ldddd", &date, 
&retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) {
                RETURN_FALSE;
        }
        
        switch(Z_TYPE_P(date)){
                case IS_LONG:
                        time = Z_LVAL_P(date);
                        break;
                case IS_STRING:
                        /* todo: more user friendly format */
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "date must be 
timestamp for now");
                        RETURN_FALSE;
        }
        N = idate('z',time,0)+1;
        
        switch(ZEND_NUM_ARGS()){
                case 1:
                        retformat = SUNFUNCS_RET_STRING;
                case 2:
                        latitude = INI_FLT("date.default_latitude");
                case 3:
                        longitude = INI_FLT("date.default_longitude");
                case 4:
                        zenith = INI_FLT("date.sunset_zenith");
                case 5:
                        gmt_offset = idate('Z',time,0)/3600;
                default:
                        break;
        }
        
        ret = sunset(N, latitude, longitude, zenith) + gmt_offset;

        switch(retformat){
                case SUNFUNCS_RET_TIMESTAMP:
                        RETURN_LONG((int)(time-(time%(24*3600)))+(int)(60*ret));
                        break;
                case SUNFUNCS_RET_STRING:
                        N =  (int)ret;
                        sprintf(retstr, "%02d:%02d", N,(int)(60*(ret-(double)N)));
                        RETVAL_STRINGL(retstr, 5, 1);
                        break;
                case SUNFUNCS_RET_DOUBLE:
                        RETURN_DOUBLE(ret);
                        break;
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid format");
                        RETURN_FALSE;
        }
}
/* }}} */


/* returns time in UTC */
double sunset(long N, double latitude, double longitude, double zenith)
{
        
        double lngHour, t, M, L, Lx, RA, RAx, Lquadrant, RAquadrant, sinDec, cosDec, 
cosH, H, T, UT, UTx;

        /*
        //step 1: First calculate the day of the year
        int N=theday - date(1,1,theday.year()) + 1;
        */

        /* step 2: convert the longitude to hour value and calculate an approximate 
time */
        lngHour= longitude / 15;

        t = (double)N + ((18 - lngHour) / 24);

        /* step 3: calculate the sun's mean anomaly */
        M = (0.9856 * t) - 3.289;

        /* step 4: calculate the sun's true longitude */
        L = M + (1.916 * sin(to_rad(M))) + (0.020 * sin (to_rad(2 * M))) + 282.634;
        while (L<0)
        {
                Lx=L+360;
                assert (Lx != L); /* askingtheguru: realy needed? */
                L = Lx;
        }
        while (L>=360)
        {
                Lx=L-360;
                assert (Lx != L); /* askingtheguru: realy needed? */
                L = Lx;
        }

        /* step 5a: calculate the sun's right ascension */
        RA = to_deg(atan (0.91764 * tan(to_rad(L))));
        while (RA<0)
        {
                RAx=RA+360;
                assert (RAx != RA); /* askingtheguru: realy needed? */
                RA = RAx;
        }
        while (RA>=360)
        {
                RAx=RA-360;
                assert (RAx != RA); /* askingtheguru: realy needed? */
                RA = RAx;
        }
        
        /* step 5b: right ascension value needs to be in the same quadrant as L */
        Lquadrant = floor(L/90)*90;
        RAquadrant = floor(RA/90)*90;
        RA=RA+(Lquadrant - RAquadrant);

        /* step 5c: right ascension value needs to be converted into hours */
        RA/=15;

        /* step 6: calculate the sun's declination */
        sinDec = 0.39782 * sin(to_rad(L));
        cosDec = cos(asin(sinDec));

        /* step 7a: calculate the sun's local hour angle */
        cosH = (cos(to_rad(zenith)) - (sinDec * sin(to_rad(latitude)))) / (cosDec * 
cos(to_rad(latitude)));

        /*
        if (cosH < -1)
                throw doesnthappen();
        */

        /* step 7b: finish calculating H and convert into hours */
        H = to_deg(acos(cosH));
        H=H/15;

        /* step 8: calculate local mean time */
        T = H + RA - (0.06571 * t) - 6.622;

        /* step 9: convert to UTC */
        UT = T - lngHour;
        while (UT<0) {
                UTx=UT+24;
                assert (UTx != UT); /* askingtheguru: realy needed? */
                UT = UTx;
        }
        while (UT>=24) {
                UTx=UT-24;
                assert (UTx != UT); /* askingtheguru: realy needed? */
                UT = UTx;
        }
        
        return UT;
}

Index: php4/ext/standard/sunfuncs.h
+++ php4/ext/standard/sunfuncs.h
#ifndef SUNFUNCS_H
#define SUNFUNCS_H

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

#define to_rad(degrees) (degrees * M_PI / 180)
#define to_rad_with_min(degrees) (degrees + minutes / 60)
#define to_deg(rad) (rad * 180 / M_PI)


/* default ini entries: */
/* Jerusalem one. */
#define DATE_DEFAULT_LATITUDE "31.7667"
#define DATE_DEFAULT_LONGITUDE "35.2333"
/* on 90'50; common jewish sunset declaration (start of sun body appear) */
#define DATE_SUNSET_ZENITH "90.83"
/* on 90'50; common jewish  sunrise declaration (sun body disappeared) */
#define DATE_SUNRISE_ZENITH "90.83"

#define SUNFUNCS_RET_TIMESTAMP 0
#define SUNFUNCS_RET_STRING 1
#define SUNFUNCS_RET_DOUBLE 2
double sunrise(long N, double latitude, double longitude, double zenith);
double sunset(long N, double latitude, double longitude, double zenith);

PHP_FUNCTION(date_sunrise);
PHP_FUNCTION(date_sunset);

#endif /* SUNFUNCS_H */

Index: php4/ext/standard/tests/general_functions/sunfuncts.phpt
+++ php4/ext/standard/tests/general_functions/sunfuncts.phpt
--TEST--
idate() function
--FILE--
<?
for($a=1;$a<=12;$a++){
        echo 
date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2)."
 ";
        echo 
date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2)." 
";
        echo 
date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2)."\n";
        
        echo 
date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2)."
 ";
        echo 
date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2)." ";
        echo 
date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2)."\n";
}
?>
--EXPECT--
1041293199 06:39 6.6524557618962
1041293806 16:46 16.769374867459
1043971592 06:32 6.5453702926602
1043972233 17:13 17.217524708736
1046390766 06:06 6.1156526756851
1046391456 17:36 17.6108549623
1049069128 05:28 5.4727420290691
1049069878 17:58 17.972552584375
1051661094 04:54 4.9012299828593
1051661898 18:18 18.313688769483
1054339474 04:34 4.5744292894498
1054340319 18:39 18.656400943241
1056931476 04:36 4.6161204505189
1056932328 18:48 18.808871657766
1059609894 04:54 4.9068825098365
1059610715 18:35 18.599286002028
1062288314 05:14 5.2368895570738
1062289083 18:03 18.060541787879
1064880332 05:32 5.542366581139
1064881044 17:24 17.411505614917
1067558754 05:54 5.9162088420581
1067559410 16:50 16.833698570628
1070150780 06:20 6.3462215520697
1070151395 16:35 16.583589055537

Index: php4/ext/standard/tests/time/idate.phpt
+++ php4/ext/standard/tests/time/idate.phpt
--TEST--
idate() function
--FILE--
<?
$tmp = "UYzymndjHGhgistwLBIW";
for($a=0;$a<strlen($tmp);$a++){
        echo idate($tmp{$a},1043324459)."\n";
}
?>
--EXPECT--
1043324459
2003
22
3
1
1
23
23
12
12
12
12
20
59
31
4
0
556
0
4

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to