Re: Calculating daylight savings time

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

 



I saw it, at first I didn't think it would work but it's great - just what I need. I guess I was just surprised that there isn't an easier way to do this in PHP by switching from the default. I also like to write my own code rather than use someone else's, since it's the best way to learn, but in this case it wasn't worth rewriting this function from scratch since it does exactly what I need.

I'm still confused though about setlocale - what does this do in plain English?

Thanks for the info,

-Lisi

At 10:05 AM 8/19/03 -0700, Micah Stevens wrote:
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


--
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