[PHP] Geboortedatum met timestamp, niet lager dan 1970.

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een website, hier wil ik graag een geboortedatum opslaan. Is leuk als er dan een dag(ma/zo) bij staat.

Ik sla nu alle tijden op als timestamp, alleen timestamp van php kan niet beneden 1970 komen.
Het script wat ik gemaakt heb kan leuk het formaat weergeven wat ik wil hebben; "Maandag 1 jan 2003"(geen idee of dat op een maandag is).
PHP kan dus niet lager dan 1970 met timestamp, dus mensen mogen op mijn site niet ouder zijn dan 30 jaar, mijn doelgroep is van 16 tot 40 dus alle mensen die ouder zijn dan 30 kunnen geen gebruik maken van de geboortedatum.

Ik had zelf ongeveer het volgende bedacht, dit zodat ik altijd kan achterhalen welke datum het is, en dit met het gebruik van PHP timestamps, alleen het werkt (theoretisch gezien) niet.

De manier die ik bedacht heb
Ik maak een database waardat ik 2 dingen in kan zetten voor de geboortedatum.
• Timestamp(niet zomaar een maar daar later meer over)
• Geboortejaar(1900 t/m nujaar-5)

Ik was dus vanplan om bij het maken van de timestamp wat dingen anders te doen.

Een week heeft 7 dagen, dus theoretisch gezien zou je NA 7 jaar een datum op een zelfde dag vallen.
b.v.
code:
1
2
3
Maandag 1 januarie 2000
dan zou je 7 jaar later dit weer hebben:
Maandag 1 januarie 2007


Als dit zou werken dan zoek ik even uit welke dag op wat valt, dan sla ik geboortedatums nooit hun geboortejaar op maar in de losse waarde. Dan sla bereken ik WEL welke van de 7 jaar het zou moetten zijn, dan sla ik als iemand geboren is op 1 jan 1960 gewoon 1 jan 1970 op, en dan het algoritme er achter even goed doorwerken, dan kan je met de jaren 1970 tm 1977 klaar zijn van het opslaan aan timestamp. Dan even het losse jaar er bij, deze in de losse waarde in mijn tabel en klaar is kees.

Alleen nou zit ik met het probleem dat dit nooit kan werken omdat je ook schrikkeljaren hebt, en veel meer ongelijkheden oneffenheden.

Is deze manier uit te werken? Ik denk zelf van niet. Zijn er andere manieren om een dagnaam vanuit een geboortedatum te berekenen? En zoja zijn deze makkelijk te gebruiken?
Ik zie dat ze het op GoT wel gelukt is om dit te doen, alleen mijn vraag is icm welke functies.

Of moet ik een table cq array aanmaken waardat van ieder jaar na 1900 de datum + dagnaam instaat? Niet echt logisch.

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Kun je het niet gewoon in een date variabele/kolom opslaan?

Who is John Galt?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
justmental schreef op 06 August 2003 @ 21:11:
Kun je het niet gewoon in een date variabele/kolom opslaan?
Hoe kan je dan de dagnaam* achterhalen vanuit deze gegevens? Zover ik weet alleen vanuit een timestamp, en dan zit ik weer met het probleem dat ik niet beneden 1970 kan komen.

* Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag en Zondag

[edit]
Ik bedoel dus dit stukje text in mijn GoT profile:
Userprofile van KingOfDos
Geboortedatum: Sunday 26 May 1985

[ Voor 34% gewijzigd door Verwijderd op 06-08-2003 21:21 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

daar hebben mysql (DAYOFWEEK()) en php (date("w")) allebei mooie functies voor! :)

[ Voor 19% gewijzigd door thomaske op 06-08-2003 21:23 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thomaske schreef op 06 augustus 2003 @ 21:22:
daar hebben mysql (DAYOFWEEK()) en php (date("w")) allebei mooie functies voor! :)
Dan heb je het op de dag van vandaag, ik wil het in geschiedenis weten. Dus ik wil de dag vanuit een gegeven datum, dit lukt ook wel via de onderstaande code, alleen dan kan ik geen geboortedatums gebruiken beneden 1970, beter lezen dus.

PHP:
1
2
3
4
5
//op profileeditform
$naardatabase = mktime(uur,minut,seconde,jaar,maand,dag);

//bij profileview
echo date("d-m-Y",$timestampuitdatabase);

[ Voor 53% gewijzigd door Verwijderd op 06-08-2003 21:27 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Met de berekening op deze site (in het Javascript-deel onderin de source) kan je de dag van de week voor een willekeurige datum zelf uitrekenen. :)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Reptile209 schreef op 06 August 2003 @ 21:26:
Met de berekening op deze site (in het Javascript-deel onderin de source) kan je de dag van de week voor een willekeurige datum zelf uitrekenen. :)
Dit is idd een wekend script, alleen hier zit ik met het probleem dat ik geen javascript beheers, en voordat ik dit script dan heb omgezet naar een php script ben ik wel weer een paar dagen vedder. Maar het blijft natuurlijk een optie.

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 06 August 2003 @ 21:23:
[...]

Dan heb je het op de dag van vandaag, ik wil het in geschiedenis weten. Dus ik wil de dag vanuit een gegeven datum, dit lukt ook wel via de onderstaande code, alleen dan kan ik geen geboortedatums gebruiken beneden 1970, beter lezen dus.
Het was meer een reactie op jouw reactie op justmental.

Wanneer je data (datums) op wilt slaan van voor 1970, zul ge gebruik moeten maken van (bv.) het datatype 'DATE', daarmee kan je zover terug in de tijd als je zelf wilt. met de mysql functie DAYOFWEEK() kan je dan bijvoorbeeld de dag van de week te weten te komen van de gegeven datum.

In php heb je de volgende mogelijkheden met het date() commando:
D - dag van de week, textueel, 3 letters; dus "Fri"
l (kleine letter 'L') - dag van de week, textueel, lang; dus "Friday"
w - dag van de week, numeriek, dus "0" (Zondag) tot "6" (Zaterdag)
en dat wordt dan:
PHP:
1
2
$de_datum = mktime(0,0,0,6,22,1914);
echo date("l d F Y", $de_datum);


genoeg mogelijkheden lijkt me zo

[ Voor 33% gewijzigd door thomaske op 06-08-2003 22:20 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
lees eens iets meer over de date en time functies van MySQL op http://www.mysql.com/doc/en/Date_and_time_functions.html
Daarmee kun je van een date field het dagnummer (0 t/m 6) enz. enz. opvragen.

Dit zou je dan eenvoudig moeten kunnen omzetten naar bijv. Zondag enz.

Hetzelfde geldt voor de maand etc.

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
DAYNAME(date)
Returns the name of the weekday for date:
mysql> SELECT DAYNAME("1998-02-05");
-> 'Thursday'
Date is hier dus een Dateveld

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thomaske schreef op 06 August 2003 @ 22:17:
en dat wordt dan:
PHP:
1
2
$de_datum = mktime(0,0,0,6,22,1914);
echo date("l d F Y", $de_datum);
mktime levert php timestamp, php timestamp kan niet lager dan 1970.
Op deze manier heb ik het nu in gebruik, alleen dat doet het niet.

Maar ik ga nu de SQL functie gebruiken, dit zal denk ik wel werken.
Weet je wat ik doe, ik lees binnekort de gehele mysql documentatie eens door :+

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Verwijderd schreef op 06 August 2003 @ 21:48:
[...]

Dit is idd een wekend script, alleen hier zit ik met het probleem dat ik geen javascript beheers, en voordat ik dit script dan heb omgezet naar een php script ben ik wel weer een paar dagen vedder. Maar het blijft natuurlijk een optie.
Ok, script in het Nederlands, mag jij 'm implementeren in PHP (want dat kan ik niet :)):
• Maak een array DagNaam met elementen 0 t/m 6; 0 = zondag, 1 = maandag, etc.

• Variabelen: dag (int) = 1..31, maand (int) = 0..11, jaar (int) >= 1600, aantaldagen (int) = 31

• Voor maand = 1 (februari): als (jaar mod 4) = 0 en (jaar mod 100) = 0 en (jaar mod 400) = 0, dan wordt variabele aantaldagen = 29, anders aantaldagen = 28. (aantaldagen is een int...)
• Voor maand = 3, 5, 8 of 10, aantaldagen = 30

• maand met 1 verminderen (maand = maand - 1 )
• als maand<1 dan maand = maand + 12 en jaar = jaar - 1

• eeuw = int ( jaar / 100) <-- deling naar beneden afronden
• jaarVanEeuw = jaar mod 100

• dagVanWeek = dag + int(2.6 * maand - 0.2) + 5 * eeuw + jaarVanEeuw + int(eeuw/4) + int (jaarVanEeuw / 4)
• dagVanWeek = dagVanWeek mod 7

dagVanWeek bevat dan de juiste index om met de array dagnaam de dag te vinden. Succes ermee ;)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Norjee
  • Registratie: April 2000
  • Niet online
Misschien heb je hier wat aan:
http://php.weblogs.com/adodb_date_time_library

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Verwijderd schreef op 06 augustus 2003 @ 21:05:
Een week heeft 7 dagen, dus theoretisch gezien zou je NA 7 jaar een datum op een zelfde dag vallen.
Dit is in verband met schrikkeljaren niet waar. Ik meen dat de cyclus 28 jaar is, zodat 1970 en 1998 dezelfde dagen hebben (en 1971 en 1999, 1972 en 2000).

Rustacean


Acties:
  • 0 Henk 'm!

Verwijderd

Manuzhai schreef op 07 August 2003 @ 00:41:
[...]
Dit is in verband met schrikkeljaren niet waar. Ik meen dat de cyclus 28 jaar is, zodat 1970 en 1998 dezelfde dagen hebben (en 1971 en 1999, 1972 en 2000).
Uit m'n hoofd even: Elke vier jaar is een schrikkeljaar. Behalve elke eeuwwisseling (1900). En dat weer behalve de millenniumwisselingen (2000).
Maar er kan natuurlijk zo weer een romijnse keizer komen (Berlusconi >:) ) die dit weer gaat veranderen... :)

Edit: Marti (hieronder) heeft gelijk. Niet elke millenniumwisseling, maar elke 400 jaar is een uitzondering op elke eeuwisseling.

[ Voor 13% gewijzigd door Verwijderd op 07-08-2003 19:45 ]


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Verwijderd schreef op 06 augustus 2003 @ 21:05:
PHP kan dus niet lager dan 1970 met timestamp
Uit de manual:
De geldige reeks van timestamps is normaal van vrijdag 13 Dec 1901 20:45:54 GMT tot dinsdag 19 Jan 2038 03:14:07 GMT. [...] Windows limiteerd deze reeks tot datums tussen 01-01-1970 en 19-01-2038.
Draai je windows of *nix?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Om een datum voor 1970 in het numerieke formaat op te slaan gebruik ik altijd negatieve getallen. Dat gaat goed tot 1902 met een standaard INT.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 07 August 2003 @ 00:50:
[...]

Uit m'n hoofd even: Elke vier jaar is een schrikkeljaar. Behalve elke eeuwwisseling (1900). En dat weer behalve de millenniumwisselingen (2000).
Maar er kan natuurlijk zo weer een romijnse keizer komen (Berlusconi >:) ) die dit weer gaat veranderen... :)
ik dacht dat het anders was:
elke vier jaar, behalve als dat jaar deelbaar is door honderd en daar heb je dan de uitzondering weer op als het deelbaar is door 400. in princiepe kloppen je voorbeelden van 1900 en 2000 dus wel, maar voor 3000 gaat ie niet op

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Johnny schreef op 07 augustus 2003 @ 00:52:
Om een datum voor 1970 in het numerieke formaat op te slaan gebruik ik altijd negatieve getallen. Dat gaat goed tot 1902 met een standaard INT.
Jah, maar zoals gezegd werkt dat niet op windows-systemen:
code:
1
2
Warning: mktime() [function.mktime]: Windows does not support negative 
values for this function in c:\shared\www\test\test.php on line 3
Op *nix werkt het wel prima:
PHP:
1
2
3
4
    $tijd = mktime (8,15,0,8,6,1945);
    echo date('D d-m-Y', $tijd);
    
    // returns: Mon 06-08-1945

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

marty schreef op 07 August 2003 @ 00:55:
[...]


ik dacht dat het anders was:
elke vier jaar, behalve als dat jaar deelbaar is door honderd en daar heb je dan de uitzondering weer op als het deelbaar is door 400. in princiepe kloppen je voorbeelden van 1900 en 2000 dus wel, maar voor 3000 gaat ie niet op
Hoe lang duurt een jaar dan in seconden?

Ik neem nu altijd 365.25 dagen per jaar om een leeftijd te berekenen aan de hand van een geboortedatum.

100 - 4 + 1 / 400 = 0.2575 schrikkeldagen per jaar zou dus preciezer zijn?

365.25 = 31557600 seconden per jaar
365.25.27 = 31558248
Jah, maar zoals gezegd werkt dat niet op windows-systemen:
Mara toen was ik al aan het typen, dus kon ik het niet zien, dat bericht was minder dan een minuut voor mij geplaatst. :)

En bij PHP & MySQL denk ik niet meteen aan Windows.

[ Voor 7% gewijzigd door Johnny op 07-08-2003 22:18 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
100 - 4 + 1 / 400 = 0.2575 schrikkeldagen per jaar zou dus preciezer zijn?
misschien precies qua wiskunde, maar verder van de dagelijkse werkelijkheid :)

Acties:
  • 0 Henk 'm!

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Johnny schreef op 07 August 2003 @ 19:19:

100 - 4 + 1 / 400 = 0.2575 schrikkeldagen per jaar zou dus preciezer zijn?
Nee, 97 / 400 = .2425 :P
Het verschil dat je dan nog overhoudt met de 'werkelijke' omlooptijd met de zon is kleiner dan het verschil in omlooptijd door de eeuwen heen (de aarde draait steeds langzamer om de zon heen (seconde per jaar ofzo)).

Maar aan deze berekening heb je niet zoveel, omdat je niet weet waarheen je moet afronden.

Nuttig linkje: http://www.tondering.dk/claus/cal/calendar26.txt

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Overigens zijn de heren wetenschappers het er nog niet helemaal over eens hoeveel seconden er nou in een jaar moeten. :D

Rustacean

Pagina: 1