In PHP reken je in principe altijd met timestamps (aantal seconden sinds 1 januari 1970). MySQL gebruikt het datetime-type, wat in principe een soort string-representatie van de datum is, maar dan geschikt om mee te rekenen. Waarschijnlijk intern ook een timestamp.quote:Op woensdag 18 mei 2011 10:42 schreef MrNiles het volgende:
[..]
dus als ik data in een sql database zet dan kan ik dat met datediff doen
huidige tijd moet ik ophalen met time() ?
Mag ik die 2 doorelkaar gebruiken?
rekenen gaat nog niet zo bestquote:Op woensdag 18 mei 2011 10:46 schreef Intrepidity het volgende:
[..]
SELECT DATEDIFF(geboortedatum, CURDATE()) FROM tabelletje
1 2 3 4 5 6 7 8 9 10 | <?php $date1 = time(); $date2 = mktime(0,0,0,10,20,2006); $date3 = strtotime($array["E_date"]); $dateDiff = $date1 - $date3; $fullDays = floor($dateDiff/(60*60*24)); $fullHours = floor(($dateDiff-($fullDays*60*60*24))/(60*60)); $fullMinutes = floor(($dateDiff-($fullDays*60*60*24)-($fullHours*60*60))/60); echo "Differernce is $fullDays days, $fullHours hours and $fullMinutes minutes."; ?> |
Op zich is het wel handiger om Date / DateTime kolommen in MySQL te gebruiken. Daar kan MySQL zelf ook meer mee en het is waarschijnlijk beter te indexen dan een functieresultaat. In PHP heb je ook een DateTime class (sinds PHP 5.2) en een DateInterval class (sinds 5.3). Erg handig om met datums te rekenen, en je hoeft geen rekening te houden met zomertijd/wintertijd. Een dag telt namelijk niet altijd 24 * 60 * 60 ( = 86.400 ) seconden. 27 maart 2011 kwam niet verder dan 82.800 seconden.quote:Op woensdag 18 mei 2011 10:38 schreef Intrepidity het volgende:
[..]
Ligt er aan wat voor type je datums hebben. Bij MySQL datetime-velden kun je gebruik maken van functies als datediff. Bij unix-timestamps zoals teruggegeven door time() kun je gewoon de getallen van elkaar aftrekken en delen door 24*60*60 (=aantal seconden in een dag).
1 2 3 4 5 6 | <?php $date3 = date("d-m",strtotime($array["E_date"])); //datum uit db $today=date("d-m"); $verjaardag=$date3-$today; echo $verjaardag; ?> |
$date3 wordt nu bijv. "25-11", daar kun je niet mee rekenen aangezien het geen getal is.quote:Op donderdag 19 mei 2011 11:11 schreef MrNiles het volgende:
ben dus wat aan het spelen met datums
bij een verjaardag heb ik dus geen jaartal nodig om aan te geven je bent over x dagen jarig
waarom werkt dit zo niet?
[ code verwijderd ]
Ik dacht zo het jaartal weg te laten
alleen met rekenen neemt ie nu niet de maanden mee
hmm..jammer...tekort door de bochtquote:Op donderdag 19 mei 2011 11:14 schreef mstx het volgende:
[..]
$date3 wordt nu bijv. "25-11", daar kun je niet mee rekenen aangezien het geen getal is.
20-05-1980 converteren naar een timestamp (hint: strtotime), dit aftrekken van de timestamp van nu, jaren uit de vergelijking halen met de modulo-operator en het aantal seconden in een jaar (365*24*60*60) en uitrekenen hoeveel dagen er nog in de overgebleven seconden zitten.quote:Op donderdag 19 mei 2011 11:16 schreef MrNiles het volgende:
[..]
hmm..jammer...tekort door de bocht
hoe kan ik dan van iemand die op 20-05-1980 geboren is uitrekenen dat ie morgen jarig is?
1 2 3 4 5 6 7 8 9 10 | <?php $geboortedatum = strtotime('20-05-1980'); $seconden = time() - $geboortedatum; // Jaren weghalen $seconden = $seconden % (365*24*60*60); // Aantal dagen tot verjaardag uitrekenen $dagen = floor($seconden / (24*60*60)); ?> |
Niet echt betrouwbaar dus eigenlijk...d'r zit ook een foutje ergens in...ff zoekenquote:Op donderdag 19 mei 2011 11:28 schreef Intrepidity het volgende:
Excuus, officieel heet ie modulus, geen modulo
En overigens is die berekening hierboven niet bepaald accuraat aangezien het geen rekening houdt met schrikkeljaren en dergelijke. Je kunt met 365.25 rekenen, maar dat is ook niet geheel juist. Maargoed, het zou je in ieder geval op weg moeten helpen met het soort berekening wat je uit moet voeren.
http://bit.ly/mj4zSRquote:Op donderdag 19 mei 2011 11:16 schreef boem-dikkie het volgende:
Even een vraagje. PHP heb ik redelijk onder de knie nu, in ieder geval de basis e.d. Ik ben wat aan het lezen over OOP maar heb nog geen idee hoe ik dit handig kan toepassen of uitproberen. Heeft iemand een goede tutorial die een beetje duidelijk maakt hoe je handig met classes e.d. leert omgaan?
DateTime ....ben benieuwd of het iets wordtquote:Op donderdag 19 mei 2011 11:32 schreef Intrepidity het volgende:
Je kunt het beste gebruik maken van de DateTime klasse. Deze biedt hier ingebouwde functionaliteit voor die wel nauwkeurig genoeg is.
Maar de data wordt met php geladen...quote:Op donderdag 19 mei 2011 12:44 schreef Intrepidity het volgende:
Ik denk dat je daarvoor beter in het javascript topic terecht kunt
Hey Niels ,quote:Op donderdag 19 mei 2011 11:11 schreef MrNiles het volgende:
ben dus wat aan het spelen met datums
bij een verjaardag heb ik dus geen jaartal nodig om aan te geven je bent over x dagen jarig
waarom werkt dit zo niet?
[ code verwijderd ]
Ik dacht zo het jaartal weg te laten
alleen met rekenen neemt ie nu niet de maanden mee
1 2 3 4 5 | <?php $resultaat = mysql_query('SELECT DATEDIFF(E_date,CURDATE()) AS AantalDagen FROM events') or die(mysql_error()); while ($record = mysql_fetch_array($resultaat)) { $verjaardag=$record['AantalDagen']; ?> |
Je moet niet het jaartal opheffen, want dan maak je het jezelf te moeilijk. Je kan beter gewoon het huidige jaartal gebruiken. Dus bijv iemand is geboren op 27 mei 1980, dan bereken je het verschil tussen 27 mei 2011 en de huidige datum. Dat is het aantal dagen tot de persoon jarig is.quote:Op vrijdag 20 mei 2011 13:29 schreef MrNiles het volgende:
misschien dat iemand me toch ff kan helpen
[ code verwijderd ]
maar hoe kan ik nu het jaar opheffen
nu bereken ik hoeveel dagen geleden iemand is geboren
misschien heel domquote:Op vrijdag 20 mei 2011 13:58 schreef Farenji het volgende:
[..]
Je moet niet het jaartal opheffen, want dan maak je het jezelf te moeilijk. Je kan beter gewoon het huidige jaartal gebruiken. Dus bijv iemand is geboren op 27 mei 1980, dan bereken je het verschil tussen 27 mei 2011 en de huidige datum. Dat is het aantal dagen tot de persoon jarig is.
Als dat verschil negatief is dan is die persoon dit jaar al jarig geweest.
Ik zou het zo doen:quote:Op vrijdag 20 mei 2011 14:08 schreef MrNiles het volgende:
[..]
misschien heel dom
maar hoe vertel ik dat 1980 2011 moet worden?
1 | select DATE_ADD('1980-05-27', INTERVAL YEAR(CURDATE()) - YEAR('1980-05-27') YEAR); |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |