Re: Calculating daylight savings time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here's the example code I was talking about in the docs, you should really 
read the user submitted notes in the docs, they're very helpful, moreso than 
the docs from time to time. 

(this is not my code..)

leafrink at hotmail dot com
 28-Feb-2003 07:26



Wrote this function after a fair bit of searching on the subject.
Don't know if it's the best way to do it, but it works.

Its not that exact but it's pretty close.

Hope it helps someone out there.

/**
* function for working out if it is daylight savings for a specific date.
* must specify when daylight savings starts and ends in the format
* "[1=First,2=Second,3=Third,4=Fourth,L=Last]:NameOfDay:Of The Month"
* e.g. "L:Sun:3" = Last Sunday in March
* some will not meet this criteria but most do.
*
* see - http://webexhibits.org/daylightsaving/g.html for daylight savings 
times around the world.
* 
*/
function is_daylight_savings($gmtime,$DSTStart = '',$DSTEnd = ''){
  //global $locale;
  //For Most Of Australia
  //DayLightSavings Starts Last sunday in October
  $DSTStart = "L:Sun:10";//$locale['DSTStart'];
  //DayLightSavings Ends Last Sunday in March
  $DSTEnd = "L:Sun:3";//$locale['DSTEnd'];
  
  $DSTStart = split(":",$DSTStart);
  $DSTEnd = split(":",$DSTEnd);
  
  $gmtMonth = date("n",$gmtime);
  // if not even in the Important changeover months.
  if ($gmtMonth < $DSTStart[2] && $gmtMonth > $DSTEnd[2]){
   return false;
  } else if ($gmtMonth > $DSTStart[2] || $gmtMonth < $DSTEnd[2]) {
   return true;
 } else {
   //it is in the Start or End Month
   if ($gmtMonth == $DSTStart[2]){
      $True = true;
      $week = $DSTStart[0];
     $ImportantDay = $DSTStart[1];
   } else {//it is in the End Month
      $True = false;
      $week = $DSTEnd[0];
     $ImportantDay = $DSTEnd[1];
   }
    //get the day of the month
  $gmtDay = date("j",$gmtime);
    //work out what week it starts/ends.
    if ($week == 'L'){
      $week = 4;
      $ldom = 4;//last day of month factor
    }
    //if the week in which it starts/ends has not been reached
    if($gmtDay < ($week-1)*7){
    return (!$True);
    } else {
      $gmtDate = getdate($gmtime);
      //go by a Day of the Week Basis
      for ($i=($week-1)*7;$i<(($week*7)+$ldom);$i++){
        $checkDate = mktime(0,0,0,$gmtDate["mon"],$i,$gmtDate["year"]);
       //get the actual day it starts/ends
        if (date("D",$checkDate) == "Sun" && date("n",$checkDate) == $gmtMonth 
){
          $day = date("j",$checkDate);
        }
      }
      if ($gmtDay < $day) {//if it has not reached the day
        return (!$True);
      } else {
        return $True;
      }
   }
 }
}

//Testing
if(is_daylight_savings(strtotime("26-Oct-2003"))){
 echo "is DAYLIGHT SAVINGS";
}else {
 echo "is NOT DAYLIGHT SAVINGS";
}



On Tuesday 19 August 2003 2:37 am, Lisi wrote:
> What I need to do is figure this out for more than one location at a time.
> I am displaying Sabbath times for several different cities around the world
> at once (New York, London, Paris, Jerusalem, Sydney) - i.e. a certain
> amount of time before sunset, different for each city and each city is in a
> different dst zone.
>
> Can I do something using setlocale, to change timezones to the city I need,
> and then use date(I)? Or does date(I) always work only for the US? And what
> exactly does setlocale change? I couldn't figure out from the notes on
> php.net.
>
> Thanks for your help,
>
> -Lisi
>
> At 12:06 AM 8/17/03 -0700, Micah Stevens wrote:
> >As an afterthought, the docs are inspecific on who's daylight savings
> >schedule
> >that the function returns. There's another user submitted function in the
> >comments list that takes into account a specific schedule.
> >
> >-Micah
> >
> >On Sunday 17 August 2003 12:43 am, Lisi wrote:
> > > I have sunset times stored in a database and the a PHP page that
> > > performs a number of calculations on the retrieved time. One of the
> > > things I need to figure out is whether or not to add an hour for
> > > Daylight Savings Time. Since there is more than once location, and each
> > > one begins and ends DST at a different time, I need to figure this out
> > > based on location. My question is, how do I figure out whether it's the
> > > "first  sunday in April" yet or not? I know it has to do with the
> > > date() function somehow, I'm just not sure how to use it properly in
> > > this case - any suggestions?
> > >
> > > Thanks,
> > >
> > > -Lisi


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


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux