<?php

        // here is the date. We wont worry about the time.
        $processdate = "07/04/2004 14:45";

What about different formats like 07-04-2004 14:45:00

...You have a good point, Curt. We could modify the code just a little bit for the same then. Instead of exploding with "/", we may opt for "-" explosion. Typically, I have observed users using one specific format for their entire application. A simple change in the function can make the function suit their requirements.



        // calling the function.
        // 1 means the date is in a daylight savings time
        // 0 means the date is not in a daylight savings time


 one thing to note, not all zones, even in the US honor the
 DST. this is a rather sepecific function.

...I believe Indiana and Arizona do not honor daylight savings time. They switch back and forth from EST to CST (Indiana) and MST to PST (Arizona) if I am not mistaken. If it is not applicable to a particular user(s), they should not use this function. This function could be useful for only those who intend to use it.



        echo daylight($processdate);

        // now the function

function daylight($mydate)
{
        // separating the date and time
        $datetime = explode(" ",$mydate);

        // exploding the components of date
        $dateexplode = explode("/",$datetime[0]);


 Instead of exploding stuff around, make your date argument compatible
 with the strtotime() function, it will return a unix timestamp or
 -1 if it fails to parse the date.

...Good point. I should write something with strtotime(). Thank you.




        // if the date is between Jan-Mar, NO DAYLIGHT
        // if the date is between Nov-Dec, NO DAYLIGHT
        if ($dateexplode[0]<4 or $dateexplode[0]>10)
        {
                return 0;
        }
        // if the date is not in the above zone, lets see
        // if the date is between May-Sep, DAYLIGHT
        elseif ($dateexplode[0]>4 and $dateexplode[0]<10)
        {
                return 1;
        }


  Since you have a timestamp as I suggested above, you simply need
  to pull the month out, and then check the month value:

...I used the above method to indicate to users what is going on. I did not use switch :: case because I did not want a month-to-month checking. I wanted to check and process for only months 4 through 10 and for only those dates in month 4 & 10 that made a difference between CST and CDT (or any time zone change, in that case).



$month = strftime('%m', $utimestamp);
swtich ($month) {
case '01': case '02': ...
return 0;
case '05': case '06': ...
return 1;
}




else
{
// we are going to pull out what date is a sunday
// then we compare our date's day-of-month with the day-that-is-sunday

$interestday = 0;

// lets see what happens in april - first sunday of the month
if ($dateexplode[0]==4)
{
// looping the first seven days to see what day is a sunday
for ($i=1; $i<=7; $i++)
{
$myday = date("w",mktime(0,0,0,$dateexplode[0],$i,$dateexplode[2]));
if ($myday==0)
$interestday = $i;
}

// now that we got what day is a sunday, lets see
// if our date's day-of-month is greater than this or not
// if it is greater, then DAYLIGHT
if ($dateexplode[1]>=$interestday)
return 1;
else
return 0;
}


// lets see what happens in october - last sunday of the month
elseif ($dateexplode[0]==10)
{
// looping the first seven days to see what day is a sunday
for ($i=25; $i<=31; $i++)
{
$myday = date("w",mktime(0,0,0,$dateexplode[0],$i,$dateexplode[2]));
if ($myday==0)
$interestday = $i;
}

// now that we got what day is a sunday, lets see
// if our date's day-of-month is greater than this or not
// if it is less, then DAYLIGHT
if ($dateexplode[1]<=$interestday)
return 1;
else
return 0;
}
}

now instead of doing all that mundane work, we simply have to
find out if the days are outabounds for the paticular months.

...Your code looks neater. Thank you.



// obtain the day of month $dayofmonth = (int)strftime('%d', $utimestamp);

  // and the day of week
  $dayofweek =  strftime('%u', $utimestamp);

  if ($month == '04') {

    // If its the first week of 04
    if ($dayofmonth <= 7) {

      // and we havn't reached sunday, return 0
      return ($dayofweek < 7) ? 0: 1;

}
return 1; // otherwise we're passed it.
} elseif ($month == '10') {
// look at the last week october
if ($dayofmonth >= 24) {
// see if we're still in the zone.
return ($dayofweek < 7) ? 1: 0;
}
return 1;


  }

  // something went wrong.
  return -2;



}



Curt

...Thanks for your comments, Curt. Whenever I write a better code, I will post it here.



Chirag Shukla.

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



Reply via email to