Here is another version of gmtime(). This one doesn't involve messing around with timezones at all. Note that PHP4 users should check out the array_combine page for replacements for that function.
<?php
function gmtime($ts=null, $is_associative=false){
if(is_null($ts)) $ts=time();
$t=array_map('intval',explode(',',gmdate('s,i,H,d,m,Y,w,z,I',$ts)));
$t[4]--;
$t[5]-=1900;
if(!$is_associative) return $t;
return array_combine(array('tm_sec','tm_min','tm_hour','tm_mday','tm_mon',
'tm_year','tm_wday','tm_yday','tm_isdst'),
$t);
}
?>
localtime
(PHP 4, PHP 5)
localtime — Ermittelt die lokale Zeit
Beschreibung
$timestamp = time()
[, bool $is_associative = false
]] )Die localtime()-Funktion gibt ein Array zurück, welches hinsichtlich seiner Struktur identisch ist mit der des Funktionsaufrufs in C.
Parameter-Liste
-
timestamp -
Der optionale Parameter
timestampist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn keintimestampübergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time(). -
is_associative -
Ist der Wert nicht angegeben oder
FALSE, ist das zurückgegebene Array ein normales numerisch indiziertes Array. Hat das Argument den WertTRUE, gibt localtime() ein assoziatives Array zurück, das alle unterschiedlichen Strukturelemente enthält, die vom Aufruf der C-Funktion localtime zurückgegeben werden. Die Namen der unterschiedlichen Schlüssel des assoziativen Arrays lauten:- "tm_sec" - Sekunden, 0 bis 59
- "tm_min" - Minuten, 0 bis 59
- "tm_hour" - Stunde, 0 bis 23
- "tm_mday" - Tag des Monats, 1 bis 31
- "tm_mon" - Monat des Jahres, 0 (Jan) bis 11 (Dez)
- "tm_year" - Jahre seit 1900
- "tm_wday" - Tag der Woche, 0 (Son) bis 6 (Sam)
- "tm_yday" - Tag des Jahres, 0 bis 365
- "tm_isdst" - Ob für das Datum die Sommerzeit zu berücksichtigen ist Positiv wenn Ja, 0 wenn Nein, negativ wenn unbekannt.
Fehler/Exceptions
Jeder Aufruf der Datums- und Zeitfunktionen
generiert eine E_NOTICE-Warnung,
wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht
oder eine E_WARNING-Warnung,
wenn die Systemeinstellung oder die TZ-Umgebungsvariable
genutzt wird. Siehe auch date_default_timezone_set()
Changelog
| Version | Beschreibung |
|---|---|
| 5.1.0 |
Erzeugt nun |
Beispiele
Beispiel #1 localtime()-Beispiel
<?php
$localtime = localtime();
$localtime_assoc = localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array
(
[0] => 24
[1] => 3
[2] => 19
[3] => 3
[4] => 3
[5] => 105
[6] => 0
[7] => 92
[8] => 1
)
Array
(
[tm_sec] => 24
[tm_min] => 3
[tm_hour] => 19
[tm_mday] => 3
[tm_mon] => 3
[tm_year] => 105
[tm_wday] => 0
[tm_yday] => 92
[tm_isdst] => 1
)
localtime
08-Dec-2006 09:22
27-Oct-2004 07:49
Be careful with the "tm_isdst" element. It may be incorrect for certain localities where daylight savings time is not observed (for example most of Saskatchewan in Canada).
24-Feb-2004 07:35
Date select box for the current week, or whatever week you give for an offset (in seconds), returns the string you can echo with the select box named $name:
function week_date_selectbox( $time_offset, $name )
{
if( isset( $time_offset ) )
$t = time() + $time_offset;
else
$t = time();
$wday = array("Sun ","Mon ","Tue ","Wed ","Thu ","Fri ","Sat ");
$mon = array("Jan ","Feb ","Mar ","Apr ","May ","Jun ","Jul ","Aug ","Sep ","Oct ","Nov ","Dec ");
$mybox = "<select name=\"$name\">\n";
for($ii = 0; $ii > -6; $ii--)
{
$tarr = localtime( $t + $ii * 86400, 1 );
if( $tarr["tm_wday"] == 0 )
{
// found Sunday, now make the week's strings
for($jj = 0; $jj < 7; $jj++)
{
$tarr = localtime( $t + ($jj + $ii) * 86400, 1 );
$mybox .= sprintf( " <option value=\"%04d-%02d-%02d\">%s%s%d %d</option>\n",
((int)$tarr["tm_year"] + 1900),
$tarr["tm_mon"],
((int)$tarr["tm_mday"] + 1),
$wday[$tarr["tm_wday"]],
$mon[$tarr["tm_mon"]],
(int)$tarr["tm_mday"],
((int)$tarr["tm_year"] + 1900) );
}
break;
}
}
$mybox .= "</select>\n";
return $mybox;
}
30-Apr-2003 08:55
For useful notes on converting between local time *at the browser* see
http://martin.f2o.org/php/localtime
20-Feb-2003 09:12
To calculate the delta between the local time and UTC:
function tzdelta ( $iTime = 0 )
{
if ( 0 == $iTime ) { $iTime = time(); }
$ar = localtime ( $iTime );
$ar[5] += 1900; $ar[4]++;
$iTztime = gmmktime ( $ar[2], $ar[1], $ar[0],
$ar[4], $ar[3], $ar[5], $ar[8] );
return ( $iTztime - $iTime );
}
So if your system is in DST, tzdelta should return -18000 (five hours less).
09-Dec-2002 10:25
You can implement gmtime quote simply.
function GetTZOffset() {
$Offset = date("O", 0);
$Parity = $Offset < 0 ? -1 : 1;
$Offset = $Parity * $Offset;
$Offset = ($Offset - ($Offset % 100))/100*60 + $Offset % 100;
return $Parity * $Offset;
}
$TZOffset = GetTZOffset();
$t_time = time()-$TZOffset*60; #Counter adjust for localtime()
$t_arr = localtime($t_time);
03-Jun-2002 04:57
Be VERY CAREFUL with the return of this function if you intend to feed it straight back into mktime(). localtime() returns months as 0 to 11, but mktime uses months as 1 to 12. The resulting off-by-one errors can be ... unpleasant.
You Have Been Warned.
Wade.
26-Apr-2002 09:42
I strongly suggest to do all of your developments using GMT/UTC dates & times.
I provide here a version of a 'gmttime' function. Save it in a separate file and include it when needed.
Please post a correction here if you find it not working for your timezone (with or without daylight saving time.).
Thanks & Enjoy.
-----------------------------------------------
//
// File: gmttime.in-p
//
// Description:
// Implements the gmttime function if missing from the PHP distribution
//
// Verifies that the function isn't already implemented
if (function_exists(gmttime))
return;
//
// Function: gmttime
//
// Description:
// Returns an array indexed as by the localtime() function:
// - 0 or tm_sec: Seconds
// - 1 or tm_min: Minutes
// - 2 or tm_hour: Hour
// - 3 or tm_mday: Day of the month
// - 4 or tm_mon: Month of the year
// - 5 or tm_year: Years since 1900
// - 6 or tm_wday: Day of the week
// - 7 or tm_yday: Day of the year
// - 8 or tm_isdst: Is daylight saving time in effect
// - tm_fyear: Full year (only available with associative array)
//
// Arguments:
// - Timestamp
// - Boolean (for associative indexing: 0 = off, 1 = on)
//
// Returns:
// An array on success,
// false on failure.
//
function gmttime($dTimestamp = '', $bAssoc = 0) {
// Evaluate how much difference there is between local and GTM/UTC
// Don't forget to correct for daylight saving time...
$aNow = localtime();
$iDelta = gmmktime(1, 1, 1, 1, 1, 1970, $aNow[8]) - mktime(1, 1, 1, 1, 1, 1970, $aNow[8]);
if (!$bAssoc) {
if ($dTimestamp == '') {
return localtime(time() - $iDelta, 0);
} else {
return localtime($dTimestamp - $iDelta, 0);
}
} else {
// For associative array, add full year index
if ($dTimestamp == '') {
$aGMTTime = localtime(time() - $iDelta, 1);
} else {
$aGMTTime = localtime($dTimestamp - $iDelta, 1);
}
$aGMTTime['tm_fyear'] = $aGMTTime['tm_year'] + 1900;
return $aGMTTime;
} // End [IF] return associative array?
} // End [FUNCTION] gmttime
31-Mar-2002 04:29
You must keep in mind the difference between your server's time and your client's time!
I ran into this one when I wrote a calendar-based reminder system with SMS messaging - guys back east were always getting their messages late. (!?!)
I wrote two functions as wrappers for date handling, ServerTime() and ClientTime() that take client time (integer timestamp) and translate to server time and vice-versa based on config file settings.
Needless to say, you CANNOT FORGET THIS.
22-Aug-2001 07:05
to set up berlin time it could look like this:
<?php
print "<HTML><body><pre>";
setlocale( "LC_ALL", "de_DE" );
putenv( "PHP_TZ=Europe/Berlin" );
$now = time();
print_r( localtime(time(),true) );
print_r( getdate() );
print date("H:i:s");
print date("T");
?>
22-Jul-2001 02:23
The corresponding function call to get the GMT time is not specified here. Only local time is reported, according to the current TZ environment setting.
One could try to use putenv() to set another timezone temporarily, however when running PHP in safe mode, putenv() is disabled and cannot be used in scripts.
However it's possible to simulate gmttime() by using localtime() and by transforming the results in the returned array.
The biggest problem with this function is that it is using an OS-dependent and localtime() function which is also depending on the standard C library implementation (some of them, do not support accurate locales). The second problem is that localtime() does not return an index specifying the local timezone offset, so transforming this date to UTC will become very ugly. Some systems support the gmtime() C function call, some don't. To get the timezone, some C libraries provide a global _timezone variable, some provide it as a macro that use a function call, some do not provide any variable, and one must deduce it by interpreting the TZ environment. This is too much ugly for PHP.
PHP should be extended by adding support to gmttime() with the same parameters, but the returned array should include additional indices to store the timezone offsets in seconds and names for both standard time and DST, for example:
[tz_offset_std] = 3600,
[tz_offset_dst]= 7200,
[tz_name_std] = 'CET', (GMT+01:00)
[tz_name_dst] = 'CEDT'. (GMT+02:00)
Or for the international, locale-independant, Zulu time (also known as UCT or simply UT), returned by gmtime():
[tz_offset] = 0,
[tz_offset_dst]= 0,
[tz_name] = 'Z',
[tz_name_dst] = 'Z'.
But it's much easier to use PHP's date() and gmdate() to make such transformations.
Beware of DST rules! In the southern hemisphere, standard time still occurs during winter, but the southern Winter is in June, not in December ! Use the tm_isdst indicator to know which timezone to display or interpret !