Gå til innhold

date("U"); Unix Epoch


Anbefalte innlegg

Muligens en litt dårlig emnetittel, men har et spørsmål ang. Unix Epoch..

Jeg har en side lagde for mange år siden, der jeg skrev inn registreringsdatoen på brukerne og alt annet med ren tekst.

Altså ikke date("U"); men date("d.m.y H:i:s");

 

Dette er noe som irriterer meg at jeg gjorde, men fant ut at dette kunne jeg gjøre noe med med litt matte.

Jeg lagde derfor en PHP snutt som regner ut datoen til sekunder.

Jeg fikk det til, men fant ut noe underlig.

 

Etter min mening så har det vært 10 skuddår siden 01.01.1970 00:00:00 (72, 76, 80, 84, 88, 92, 96, 00, 04, 08)

Men jeg får kun kodesnutten min til å funke om jeg skriver inn at det har vært 9 skuddår :o

 

Er det noen som sitter med svaret på hvordan det kan ha seg?

 

 

<?php

 

$minute = 60; // antall sekunder i ett minutt

$hour = $minute * 60; // antall sekunder i en time

$day = $hour * 24; // antall sekunder i en dag

$year = $day * 365; // antall sekunder i et år

 

$skudd_for_2008 = 8; // antall skuddår før 2008

$skudd_etter_2008 = 9; // antall skuddår fra og med 2008 (f.o.m Mars selvfølgelig)

$skuddaar_for_2008 = $skudd_for_2008 * $day;

$skuddaar_etter_2008 = $skudd_etter_2008 * $day;

 

$timestamp = "01.03.08 15:36:51"; // Datoen som skal regnes om til sekunder

 

$dager_maned = array(

1 => "31",

2 => "28",

3 => "31",

4 => "30",

5 => "31",

6 => "30",

7 => "31",

8 => "31",

9 => "30",

10 => "31",

11 => "30",

12 => "31"

);

 

$klokkedato = explode(" ", $timestamp);

$dato = $klokkedato[0];

$klokke = $klokkedato[1];

 

$dma = explode(".", $dato);

$dag = $dma[0];

$maned = $dma[1];

$aar = "20".$dma[2];

 

$tms = explode(":", $klokke);

$time = $tms[0];

$minutt = $tms[1];

$sekund = $tms[2];

 

 

 

$unix_years = $aar - 1970;

$unix_years = $unix_years * $year;

$unix_days = $dag * $day;

$unix_hours = $time * $hour;

$unix_minutes = $minutt * $minute;

 

 

 

if($maned < 10) $maned = str_replace("0", "", $maned);

$maned_dager[0] = 0;

$i = 1;

while($i < $maned) {

$md = $i - 1;

$maned_dager[$i] = $maned_dager[$md] + $dager_maned[$i];

$i++;

}

 

$i = $i - 1;

$maned_dager = $maned_dager[$i] * $day;

 

$sektot_am = $unix_years + $maned_dager;

$sektot_amd = $unix_days + $sektot_am;

$sektot_amdt = $unix_hours + $sektot_amd;

$sektot_amdtm = $unix_minutes + $sektot_amdt;

$sektot_amdtms = $sekund + $sektot_amdtm;

$sektot_gmt1 = $sektot_amdtms - $hour; // trekker fra 1 time siden Unix Epoch er GMT og her er det GMT+1

 

if($aar == 2008) {

if($maned > 2) $sektot_final = $sektot_gmt1 + $skuddaar_etter_2008;

elseif($maned <= 2) $sektot_final = $sektot_gmt1 + $skuddaar_for_2008;

}

 

if($aar > 2008) $sektot_final = $sektot_gmt1 + $skuddaar_etter_2008;

if($aar < 2008) $sektot_final = $sektot_gmt1 + $skuddaar_for_2008;

 

 

print("Før utregning:<br>".$timestamp."<br><br>");

print("Etter utregning:<br>".date("d.m.y H:i:s", $sektot_final));

 

 

 

?>

 

 

Jeg forventer ikke at dere skjønner navngivningen på variablene, poenget er at nå står antall skuddår etter 2008 på 9 (og ikke 10 som den burde), og da funker koden. Har testa med masse forskjellige datoer og tider, og har ikke merka noen feil enda.

 

Første brukeren ble registrert i 2006, så har bare tatt med før og etter skuddåret i 2008.

Med årstall før skuddåret i 2004 vil datoen bli feil.

Endret av YaNkEs
Lenke til kommentar
Videoannonse
Annonse

Det er fordi det ikke alltid er skuddår hvert 4. år. De årene delelig med 100 er ikke skuddår, noe som vil gjelde for blant annet år 2000.

 

Red.: Nei, vent nå litt. De delelig med 400 er allikevel skuddår :hmm:

Endret av Ernie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...