[PHP] GMT to local time (CDT in this case)

2004-07-13 Thread Chirag Shukla


// I am using the convention (assumption) of "07/04/2004 14:45"
$processdate = "07/04/2004 14:45";
// gmttolocal is a function
// i am passing it 2 parameters:
// 1)the date in the above format and
// 2)time difference as a number; -5 in our case (GMT to CDT)
echo gmttolocal($processdate,-5);
function gmttolocal($mydate,$mydifference)  
{
// trying to seperate date and time
$datetime = explode(" ",$mydate);

// trying to seperate different elements in a date
$dateexplode = explode("/",$datetime[0]);

// trying to seperate different elements in time
$timeexplode = explode(":",$datetime[1]);
	// getting the unix datetime stamp
	$unixdatetime = 
mktime($timeexplode[0]+$mydifference,$timeexplode[1],0,$dateexplode[0],$dateexplode[1],$dateexplode[2]);

// return the local date
return date("m/d/Y H:i",$unixdatetime));
}
?>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] DAYLIGHT SAVINGS TIME OR NOT

2004-07-13 Thread Chirag Shukla
This function can be used to know whether it is Daylight Savings time or 
not for the given date. It may not be the most optimized program, but 
may be helpful.

If there is a modified code, please let me know.
Thank you.
Sincerely,
Chirag Shukla.

// here is the date. We wont worry about the time.
$processdate = "07/04/2004 14:45";
// calling the function.
// 1 means the date is in a daylight savings time
// 0 means the date is not in a daylight savings time
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]);
// 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;
}
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;
}
}
}
?>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] DAYLIGHT SAVINGS TIME OR NOT

2004-07-14 Thread Chirag Shukla


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