Hi Patrick,
[I have put this back on the list, because greater minds might come up
with a better explanation!?]

There appears to be an issue with "gm" time functions. gmmktime() is
supposed to take a GMT date and return a GMT UNIX TimeStamp (as per
mktime() but with no DST parameter). Conversely date() and gmdate() take
a UNIX TimeStamp and format a string representation of the date-time.

The question is how gmmktime() should perform when working with
date-times on both sides of the summer time discontinuity.

Assuming your server is running in a timezone that will change to/from
Summer Time over the coming weekend (others may be able to adjust
dates/offsets to run 'backwards' to cover last weekend, where relevant),
try running the following code; and explaining why the "gm" functions do
not complement each other (see below (way on down) for Patrick's
original observations):

<table border="0" cellpadding=5 width="100%">
  <tr>
    <td width="20%"></td>
    <td width="20%">Time Key Value</td>
    <td width="20%">Local</td>
    <td width="20%">GMT</td>
    <td width="20%">Comment</td>
  </td>
  <tr>
  <tr>
    <td colspan=5>
    <hr>
    </td>
  </tr>

<?php
$tsNow = time();
$dtLoc = date(   "D d.m.Y H:i I", $tsNow );
$dtGMT = gmdate( "D d.m.Y H:i I", $tsNow );
echo "<tr>" .
   "<td>Now TS<br>produces dates:</td>" .
   "<td>$tsNow</td>" .
   "<td><br>$dtLoc</td>" .
   "<td><br>$dtGMT</td>" .
     "<td>as expected</td>" .
   "</tr>" ;

$ss   = date( "s", $tsNow );
$hh   = substr($dtLoc, 15, 2);
$mm   = substr($dtLoc, 18, 2);
$DD   = substr($dtLoc,  4, 2);
$MM   = substr($dtLoc,  7, 2);
$YYYY = substr($dtLoc, 10, 4);
$DST  = substr($dtLoc, 21, 1);
$mkLoc   =   mktime( $hh, $mm, $ss, $MM, $DD, $YYYY, $DST );
$gmmkLoc = gmmktime( $hh, $mm, $ss, $MM, $DD, $YYYY );
$hh   = substr($dtGMT, 15, 2);
$mm   = substr($dtGMT, 18, 2);
$DD   = substr($dtGMT,  4, 2);
$MM   = substr($dtGMT,  7, 2);
$YYYY = substr($dtGMT, 10, 4);
$DST  = substr($dtGMT, 21, 1);
$mkGMT   =   mktime( $hh, $mm, $ss, $MM, $DD, $YYYY, $DST );
$gmmkGMT = gmmktime( $hh, $mm, $ss, $MM, $DD, $YYYY );
echo "<tr>" .
   "<td colspan=2>Run above dates through mktime() to revert to TS</td>"
.
   "<td>$mkLoc</td>" .
   "<td>$mkGMT</td>" .
     "<td>both correct</td>" .
   "</tr>" ;
echo "<tr>" .
   "<td colspan=2>Run above dates through gmmktime() to revert to
TS</td>" .
   "<td>$gmmkLoc<br></td>" .
   "<td>$gmmkGMT</td>" .
     "<td>both incorrect???</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (incorrect) TS through date()</td>" .
//$dtLoc = date(   "D d.m.Y H:i I", $tsNow );
//$dtGMT = gmdate( "D d.m.Y H:i I", $tsNow );
   "<td>" . date( "D d.m.Y H:i I", $gmmkLoc ) . "<br></td>" .
   "<td>" . date( "D d.m.Y H:i I", $gmmkGMT ) . "</td>" .
     "<td>continue incorrect</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (incorrect) TS through gmdate()</td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $gmmkLoc ) . "<br></td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $gmmkGMT ) . "</td>" .
     "<td>continue incorrect</td>" .
   "</tr>" ;

echo "<tr><td colspan=5><hr></td></tr>" ;

$ts1wk = $tsNow + ( 7 * 24 * 60 * 60 );
$dtLoc = date(   "D d.m.Y H:i I", $ts1wk );
$dtGMT = gmdate( "D d.m.Y H:i I", $ts1wk );
echo "<tr>" .
   "<td>TS in one week's time<br>produces dates:</td>" .
   "<td>$ts1wk</td>" .
   "<td><br>$dtLoc</td>" .
   "<td><br>$dtGMT</td>" .
     "<td>local clock springs forwards</td>" .
   "</tr>" ;

$ss   = date( "s", $ts1wk );
$hh   = substr($dtLoc, 15, 2);
$mm   = substr($dtLoc, 18, 2);
$DD   = substr($dtLoc,  4, 2);
$MM   = substr($dtLoc,  7, 2);
$YYYY = substr($dtLoc, 10, 4);
$DST  = substr($dtLoc, 21, 1);
$mkLoc   =   mktime( $hh, $mm, $ss, $MM, $DD, $YYYY, $DST );
$gmmkLoc = gmmktime( $hh, $mm, $ss, $MM, $DD, $YYYY );
$hh   = substr($dtGMT, 15, 2);
$mm   = substr($dtGMT, 18, 2);
$DD   = substr($dtGMT,  4, 2);
$MM   = substr($dtGMT,  7, 2);
$YYYY = substr($dtGMT, 10, 4);
$DST  = substr($dtGMT, 21, 1);
$mkGMT   =   mktime( $hh, $mm, $ss, $MM, $DD, $YYYY, $DST );
$gmmkGMT = gmmktime( $hh, $mm, $ss, $MM, $DD, $YYYY );
echo "<tr>" .
   "<td colspan=2>Run above dates through mktime() to revert to TS</td>"
.
   "<td>$mkLoc</td>" .
   "<td>$mkGMT</td>" .
     "<td>both correct - using dst!</td>" .
   "</tr>" ;
echo "<tr>" .
   "<td colspan=2>Run above dates through gmmktime() to revert to
TS</td>" .
   "<td>$gmmkLoc<br></td>" .
   "<td><br>$gmmkGMT</td>" .
     "<td>local incorrect<br>- GMT correct</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (correct) gmTS through date()</td>" .
   "<td>" . date( "D d.m.Y H:i I", $gmmkGMT ) . "</td>" .
   "<td></td>" .
     "<td>continues correct</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (correct) gmTS through gmdate()</td>" .
   "<td></td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $gmmkGMT ) . "</td>" .
     "<td>continues correct</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (incorrect) gmTS through date()</td>" .
   "<td>" . date( "D d.m.Y H:i I", $gmmkLoc ) . "</td>" .
   "<td></td>" .
     "<td>continues incorrect</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>Run above (incorrect) gmTS through gmdate()</td>" .
   "<td></td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $gmmkLoc ) . "</td>" .
     "<td>continues incorrect</td>" .
   "</tr>" ;

echo "<tr><td colspan=5><hr></td></tr>" ;

$tsLoc = mktime( );
$tsGMT = gmmktime( );
echo "<tr>" .
   "<td>*mktime( NOW)</td>" .
   "<td>" . date( 'D d.m.Y H:i I' ) . "</td>" .
   "<td>$tsLoc</td>" .
   "<td>$tsGMT</td>" .
     "<td>think they should be same?<br>but GMT doesn't like it!</td>" .
   "</tr>" ;

$tsLoc = mktime(   0, 0, 0, 3, 31, 2002 );
$tsGMT = gmmktime( 0, 0, 0, 3, 31, 2002 );
echo "<tr>" .
   "<td>put change-over date into *mktime to get TSs</td>" .
   "<td>Sun 31Mar2002 02:00</td>" .
   "<td>$tsLoc</td>" .
   "<td>$tsGMT</td>" .
   "<td>again<br>not same!?</td>" .
   "</tr>" ;

echo "<tr><td colspan=5><hr></td></tr>" ;

echo "<tr>" .
   "<td colspan=2>Count from midnight over GMT/BST changeover:</td>" .
   "</tr>" ;

echo "<tr>" .
   "<td colspan=2>by putting LocalTS ($tsLoc) into *date</td>" .
     "<td>Local time jumps...</td>" .
     "<td>GMT continues...</td>" .
   "</tr>" ;

for ( $iOffset = 0; $iOffset < 5; $iOffset ++ )
{
   $iHour = $iOffset * 3600;
echo "<tr>" .
   "<td>Midnight+$iOffset</td>" .
   "<td></td>" .
   "<td>" .   date( "D d.m.Y H:i I", $tsLoc + $iHour ) . "</td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $tsLoc + $iHour ) . "</td>" .
     "<td></td>" .
   "</tr>" ;
}

echo "<tr>" .
   "<td colspan=2>by putting GMT TS ($tsGMT) into *date</td>" .
   "<td></td>" .
   "<td></td>" .
     "<td>garbage?!</td>" .
   "</tr>" ;

for ( $iOffset = 0; $iOffset < 5; $iOffset ++ )
{
   $iHour = $iOffset * 3600;
echo "<tr>" .
   "<td>Midnight+$iOffset</td>" .
   "<td></td>" .
   "<td>" .   date( "D d.m.Y H:i I", $tsGMT + $iHour ) . "</td>" .
   "<td>" . gmdate( "D d.m.Y H:i I", $tsGMT + $iHour ) . "</td>" .
     "<td></td>" .
   "</tr>" ;
}

echo "</table>" ;

?>


Patrick: herewith specific answers to your most recent msg:-

Yes, as mentioned I am in GMT (London). However the tests run (over the
next one week period) are valid because during this weekend we
cross-over into BST (GMT+1) and try (vainly) to catch up with you.

Thus the tests below ARE valid and illustrate your very point, because
the date-ranges span the summer time discontinuity. (so I don't need to
run it on another box/change the server's TZ setting, I simply read the
second half of the report)

It is not missing one day, but one hour!

Regards,
=dn



> Fucko. I kicked this pony-style. Yes - typo!!!! Didn't know what hit
me there.
> Output is as you said. Gotta have been drunk or something... But
anyaway,
> that's not really the point.
>
> The point is, that in the count-days-version you're sort of missing a
day:
>
> > 1017529200= gmmktim epoch - Sat 30.03.2002 23:00 0   <<<<<<
> > 1017532800= mktim epoch - Sun 31.03.2002 00:00 0
> >
> > 1017619200= gmmktim epoch - Mon 01.04.2002 00:00 0   <<<<<<
> > 1017615600= mktim epoch - Mon 01.04.2002 00:00 1
>
> Now, for some reason (and I REALLY got this checked for typos now) the
> 'count second'-version ends up showing me 23:00 0 of the previous day
> consistently. It IS consistent throughout DST changes. But it's one
hour
> off when created with mktime and printed with gmdate. And I can give
you
> the reason: Taken from your email-adress you're in TZ+/-0, right. And
that's
> the ONLY location where gmmktime(0,0,0,28,3,2002) actually gives you
the
> epoch stamp of that date. If I do it, my timezone gets subtracted and
I
> end up with the epoch stamp of 23.00 of the last day (my TZ beeing
+1).
>
> ufff - hope I made my point clear. It's just that gmmktime is still
> somehow localized. So for mew it would mean that I have to subtract
> my TZ everytime I use gmmktime to get the correct epoch.
>
> Just try running the code on a box that's not in TZ 0 and you'll see
> what I mean.
>
>
> greets,
>   patrick./
>
>
>
>
> DL Neil wrote:
> >
> > Hi Patrick,
> >
> > > before spamming the group with this, let's see if we're talking
about
> > > the same here:
> >
> > It would not be "spam"! It is list business, and copying the list
gives
> > others the opportunity to answer before I do/offer other ideas - and
> > others following the discussion the opportunity to learn...
> >
> > > I completely agree with your points, but if I execute the two
lines
> > you
> > > propose from here (TZ+1, no DST):
> > >
> > > echo gmdate ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
> > > echo gmdate ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
> > > I'm getting:
> > > Dec 31 1997 23:00:00
> > > Dec 31 1997 23:00:00
> > > ... so it's the same both times.
> >
> > Because of a typo?
> >
> > Note that the clock is taken from your server (not your client)
> > location, and further note that the server administrator can set up
any
> > timezone (s)he pleases regardless of physical location. Also we
depend
> > upon the server's ToD clock being correctly set! If you're the
server
> > admin, then we're ok, if not questions may need to be asked!
> >
> > For your interest, I took your code (per your first msg) and ran it
on
> > my machine (set to GMT, changing to BST on Sunday morning).  I then
> > extended it to illustrate the points - after the code, please find
> > sample output:-
> >
> > print "count days:<br>\n";
> > for($day=0; $day<7; $day++)
> > {
> >    $timgmt = gmmktime(0,0,0,3,28+$day,2002);
> >  $timloc = mktime(0,0,0,3,28+$day,2002);
> >  print $timgmt . "= gmmktim epoch - " . gmdate("D d.m.Y H:i
I",$timgmt).
> > "<br>\n";
> >  print $timloc . "= mktim epoch - " . date("D d.m.Y H:i  I",$timloc)
.
> > "<br>\n";
> >  print "<BR>\n";
> > }
> >
> > print "<BR>\n";
> > print "<BR>\n";
> > print "count seconds:<br>\n";
> > $baseepoch = $timloc = mktime(0,0,0,3,28,2002);
> > for($day=0; $day<7; $day++)
> > {
> >    $epochnow = $baseepoch + (60 * 60 * 24 * $day);
> >  print $epochnow . "= gmmktim epoch - " . gmdate("D d.m.Y H:i
> > I",$epochnow) . "<br>\n";
> >  print $epochnow . "= mktim epoch - " . date("D d.m.Y H:i
I",$epochnow)
> > . "<br>\n";
> >  print "<BR>\n";
> > }
> >
> > print "<BR>\n";
> > print "<BR>\n";
> > print "count hours over GMT/BST changeover:<br>\n";
> > for( $timestamp = 1017532800; $timestamp < 1017547200; $timestamp =
> > $timestamp + 3600 )
> > {
> >    print $timestamp . " = " .
> >    date( "D d.m.Y H:i I", $timestamp ) . " = " .
> >    gmdate( "D d.m.Y H:i I", $timestamp ) . "<br>\n";
> > }
> >
> > print "<BR>\n";
> > print "<BR>\n";
> > print "count dates from midnight over GMT/BST changeover:<br>\n";
> > for( $hour = 0; $hour < 4; $hour ++ )
> > {
> >    print $hour . " = " .
> >    mktime(   $hour, 0, 0, 3, 31, 2002 ) . " = " .
> >      gmmktime( $hour, 0, 0, 3, 31, 2002 ) . "<br>\n";
> > }
> >
> > -----
> >
> > count days:
> > 1017270000= gmmktim epoch - Wed 27.03.2002 23:00 0
> > 1017273600= mktim epoch - Thu 28.03.2002 00:00 0
> >
> > 1017356400= gmmktim epoch - Thu 28.03.2002 23:00 0
> > 1017360000= mktim epoch - Fri 29.03.2002 00:00 0
> >
> > 1017442800= gmmktim epoch - Fri 29.03.2002 23:00 0
> > 1017446400= mktim epoch - Sat 30.03.2002 00:00 0
> >
> > 1017529200= gmmktim epoch - Sat 30.03.2002 23:00 0
> > 1017532800= mktim epoch - Sun 31.03.2002 00:00 0
> >
> > 1017619200= gmmktim epoch - Mon 01.04.2002 00:00 0
> > 1017615600= mktim epoch - Mon 01.04.2002 00:00 1
> >
> > 1017705600= gmmktim epoch - Tue 02.04.2002 00:00 0
> > 1017702000= mktim epoch - Tue 02.04.2002 00:00 1
> >
> > 1017792000= gmmktim epoch - Wed 03.04.2002 00:00 0
> > 1017788400= mktim epoch - Wed 03.04.2002 00:00 1
> >
> > count seconds:
> > 1017273600= gmmktim epoch - Thu 28.03.2002 00:00 0
> > 1017273600= mktim epoch - Thu 28.03.2002 00:00 0
> >
> > 1017360000= gmmktim epoch - Fri 29.03.2002 00:00 0
> > 1017360000= mktim epoch - Fri 29.03.2002 00:00 0
> >
> > 1017446400= gmmktim epoch - Sat 30.03.2002 00:00 0
> > 1017446400= mktim epoch - Sat 30.03.2002 00:00 0
> >
> > 1017532800= gmmktim epoch - Sun 31.03.2002 00:00 0
> > 1017532800= mktim epoch - Sun 31.03.2002 00:00 0
> >
> > 1017619200= gmmktim epoch - Mon 01.04.2002 00:00 0
> > 1017619200= mktim epoch - Mon 01.04.2002 01:00 1
> >
> > 1017705600= gmmktim epoch - Tue 02.04.2002 00:00 0
> > 1017705600= mktim epoch - Tue 02.04.2002 01:00 1
> >
> > 1017792000= gmmktim epoch - Wed 03.04.2002 00:00 0
> > 1017792000= mktim epoch - Wed 03.04.2002 01:00 1
> >
> > count hours over GMT/BST changeover:
> > 1017532800 = Sun 31.03.2002 00:00 0 = Sun 31.03.2002 00:00 0
> > 1017536400 = Sun 31.03.2002 01:00 0 = Sun 31.03.2002 01:00 0
> > 1017540000 = Sun 31.03.2002 03:00 1 = Sun 31.03.2002 02:00 0
> > 1017543600 = Sun 31.03.2002 04:00 1 = Sun 31.03.2002 03:00 0
> >
> > count dates from midnight over GMT/BST changeover:
> > 0 = 1017532800 = 1017529200
> > 1 = 1017536400 = 1017532800
> > 2 = 1017536400 = 1017532800
> > 3 = 1017540000 = 1017543600
> >
> > -----
> >
> > >From this you can clearly see the impact of the changing local
clock/TZ
> > as Britain clicks over into Summer Time. Note how adding 3600
minutes to
> > the timestamp results in a jump of two hours in local time over the
> > 'discontinuity'.
> >
> > This also illustrates how a timestamp (integer value) is measured in
GMT
> > (see my first response for definition) - thus the GMT progression is
> > uniform, but the local progression shows a discontinuity.
> >
> > > My observation is, that gmmktime(0,0,0,1,1,2002) will in fact not
> > generate
> > > the UNIX-epoch timestamp for the 1.1.2002 0:0 GMT time, but it
will
> > take
> > > your time-offset in count and generate the epoch stamp for
1.1.2002
> > > 0:0+TZoffset',
> > > leaving you with the 'true' stamp of 31.12.2002 23:00.
> > >
> > > Now what I'm looking for is a function (I expected gmmktime to do
so)
> > that
> > > will actually generate the 'true' unix epoch for the date I seek.
So
> > that
> > >
> > > echo gmdate("M d Y H:i:s", "puremktime"(0,0,0,1,1,2002)
> > >
> > > WOULD actually return 1.1.2002 0:0 and NOT 31.12.2001 23:00 for
> > central
> > > europe.
> > >
> > >
> > > what do you think?
> >
> > I think the code/output also illustrates that you are correct in
what
> > you say, but I'm feeling a bit woolly-headed so I'm wondering if
I've
> > missed something. Are we saying that the date arguments entered into
> > gmmktime() are considered to be local time, and the answer GMT - the
> > former subject to TZ/BST considerations but the latter not? Whereas
you
> > want to enter a GMT date-time into gmmktime() and get GMT data out?
> >
> > For sure we need to understand the PHP (UNIX) definitions in order
to
> > make best use of the facilities/functions! In other words I'm
wondering
> > if we are (making incorrect assumptions) pushing the 'wrong data'
into
> > the function, rather than the function giving us the 'wrong answer'
> > back!? I've checked my reference book and been unsatisfied with the
> > bland definitions. Can I leave you to check the online annotated
manual?
> >
> > Regards,
> > =dn
> >
> > > greets,
> > >   patrick./
> > >
> > >
> > >
> > >
> > > Dl Neil wrote:
> > > >
> > > > BTW for all who are following this, Patrick has cleverly
illustrated
> > > > that most of the northern hemisphere locations where summer time
is
> > > > observed will 'spring forward' this weekend. Most of the
southern
> > > > hemisphere locations that were in summer time did their 'fall
back'
> > last
> > > > weekend!
> > > > NB the two uses of the word "most"!
> > > >
> > > > Hi Patrick,
> > > >
> > > > References from the manual:
> > > > -----
> > > > gmmktime -- Get UNIX timestamp for a GMT date
> > > > -----
> > > > gmdate -- Format a GMT/CUT date/time
> > > >
> > > > Identical to the date() function except that the time returned
is
> > > > Greenwich Mean Time (GMT). For example, when run in Finland (GMT
> > +0200),
> > > > the first line below prints "Jan 01 1998 00:00:00", while the
second
> > > > prints "Dec 31 1997 22:00:00".
> > > > echo date ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
> > > > echo gmdate ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
> > > > -----
> > > >
> > > > The definition of the Unix Epoch is itself in GMT (and adjusted
from
> > > > there to local time using the +/-TZ difference): "the current
time
> > > > measured in the number of seconds since the Unix Epoch (January
1
> > 1970
> > > > 00:00:00 GMT)".
> > > >
> > > > When playing around with UNIX epoch seconds it is important to
keep
> > them
> > > > time-zone separated. So try working your test backwards and
putting
> > in a
> > > > data/time and then asking for the GMT and the local timestamp
> > values.
> > > > They will also be separated by the one hour/two hours.
> > > >
> > > > Question answered, or in my haste to get to my dinner...?
> > > > Regards,
> > > > =dn
> > > >
> > > > > i'm storing events in a mysql-db, using epoch timestamps to
> > pinpoint
> > > > the
> > > > > exact date/time for an event.
> > > > >
> > > > > so far, I have been using localtime, being aware that there
are
> > > > > inconsistencies
> > > > > in the number of epoch-seconds, when DST flips on and off.
> > > > nevertheless, that
> > > > > works fine as long as you stick to mktime() and date() for all
the
> > > > date-math
> > > > > as in mktime(0,0,0,$month,$day+$offset,$year)
> > > > >
> > > > > but as soon as you leave php and have to do some calculation
in
> > > > javascript,
> > > > > you will encounter functions that behave differently on the pc
and
> > mac
> > > > > platforms. so you have to revert back to the 'add
86400-seconds'
> > to
> > > > calculate
> > > > > the next day.
> > > > >
> > > > > so I thought it would be nice to have all the timestamps as
> > linear,
> > > > > non-dst-epoch-seconds (UTC) and I went into the gmmktime() and
> > > > gmdate()
> > > > > functions, assuming they would do the math in a linear
> > second-based
> > > > timespace
> > > > > (in GMT, without DST). That seems to be the case for the
output of
> > > > 'gmdate',
> > > > > that remains correct, if you count up seconds across the DST
> > boundary
> > > > (see
> > > > > second example).
> > > > >
> > > > > but it seems that there is no way to calculate the gmt-epoch
for a
> > > > given
> > > > > date using gmmktime without having to add/subtract the TZ
> > manually.
> > > > gmmktime
> > > > > will always take your local DST-settings into calculation and
upon
> > > > conversion
> > > > > back with gmdate, you will be off by the number of hours of
your
> > > > timezone.
> > > > > I thought gmmktime() would handle this as if the computer
would be
> > in
> > > > > Greenwich
> > > > > (TZ=0), which would then leave us with the two functions
> > > > encoding/decoding
> > > > > consistently.
> > > > >
> > > > > anyone having solved this properly?
> > > > >
> > > > > -------------------------------------
> > > > > print "count days:<br>\n";
> > > > > for($day=0; $day<7; $day++){
> > > > > $timgmt = gmmktime(0,0,0,3,28+$day,2002);
> > > > > $timloc = mktime(0,0,0,3,28+$day,2002);
> > > > > print $timgmt . "= gmmktim epoch - " . gmdate("D d.m.Y H:i
> > I",$timgmt)
> > > > .
> > > > > "<br>\n";
> > > > > print $timloc . "= mktim epoch - " . date("D d.m.Y H:i
> > I",$timloc) .
> > > > > "<br>\n";
> > > > > print "<BR>\n";
> > > > > }
> > > > >
> > > > > ----
> > > > > count days:
> > > > > 1017270000= gmmktim epoch - Wed 27.03.2002 23:00 0
> > > > > 1017270000= mktim epoch - Thu 28.03.2002 00:00 0
> > > > >
> > > > > 1017356400= gmmktim epoch - Thu 28.03.2002 23:00 0
> > > > > 1017356400= mktim epoch - Fri 29.03.2002 00:00 0
> > > > >
> > > > > 1017442800= gmmktim epoch - Fri 29.03.2002 23:00 0
> > > > > 1017442800= mktim epoch - Sat 30.03.2002 00:00 0
> > > > >
> > > > > 1017529200= gmmktim epoch - Sat 30.03.2002 23:00 0
> > > > > 1017529200= mktim epoch - Sun 31.03.2002 00:00 0
> > > > >                                                     <<<dst on
> > > > > 1017619200= gmmktim epoch - Mon 01.04.2002 00:00 0  <<< off by
one
> > > > hour due to
> > > > > DST
> > > > > 1017612000= mktim epoch - Mon 01.04.2002 00:00 1
> > > > >
> > > > > 1017705600= gmmktim epoch - Tue 02.04.2002 00:00 0
> > > > > 1017698400= mktim epoch - Tue 02.04.2002 00:00 1
> > > > >
> > > > > 1017792000= gmmktim epoch - Wed 03.04.2002 00:00 0
> > > > > 1017784800= mktim epoch - Wed 03.04.2002 00:00 1
> > > > >
> > > > >
> > > > > -------------------------------------
> > > > > print "count seconds:<br>\n";
> > > > > $baseepoch = $timloc = mktime(0,0,0,3,28,2002);
> > > > > for($day=0; $day<7; $day++){
> > > > > $epochnow = $baseepoch + (60 * 60 * 24 * $day);
> > > > > print $epochnow . "= gmmktim epoch - " . gmdate("D d.m.Y H:i
> > > > I",$epochnow) .
> > > > > "<br>\n";
> > > > > print $epochnow . "= mktim epoch - " . date("D d.m.Y H:i
> > > > I",$epochnow) .
> > > > > "<br>\n";
> > > > > print "<BR>\n";
> > > > > }
> > > > > ----
> > > > > count seconds:
> > > > > 1017270000= gmmktim epoch - Wed 27.03.2002 23:00 0  <<<
> > consistent,
> > > > but off by
> > > > > -1 (your TZ)
> > > > > 1017270000= mktim epoch - Thu 28.03.2002 00:00 0
> > > > >
> > > > > 1017356400= gmmktim epoch - Thu 28.03.2002 23:00 0
> > > > > 1017356400= mktim epoch - Fri 29.03.2002 00:00 0
> > > > >
> > > > > 1017442800= gmmktim epoch - Fri 29.03.2002 23:00 0
> > > > > 1017442800= mktim epoch - Sat 30.03.2002 00:00 0
> > > > >
> > > > > 1017529200= gmmktim epoch - Sat 30.03.2002 23:00 0
> > > > > 1017529200= mktim epoch - Sun 31.03.2002 00:00 0
> > > > >
> > > > > 1017615600= gmmktim epoch - Sun 31.03.2002 23:00 0
> > > > > 1017615600= mktim epoch - Mon 01.04.2002 01:00 1
> > > > >
> > > > > 1017702000= gmmktim epoch - Mon 01.04.2002 23:00 0
> > > > > 1017702000= mktim epoch - Tue 02.04.2002 01:00 1
> > > > >
> > > > > 1017788400= gmmktim epoch - Tue 02.04.2002 23:00 0
> > > > > 1017788400= mktim epoch - Wed 03.04.2002 01:00 1
> > > > >
> > > > > --


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

Reply via email to