Rekenen met datetime

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michiel

Michiel

08/09/2008 19:55:00
Quote Anchor link
Ik heb in de database bijvoorbeeld:
2008-09-03 21:45:00 (3 september 2008 21:45)

Stel we zijn nu

2008-09-04 22:45:00 (4 september 2008 22:45)

=> we zijn 1 dag 1 uur later, 25 uren later

Hoe kan ik nu met behulp van php of queries, bepalen dat we 1 dag 1 uur later of 25 uren later zijn.

Het enige wat ik momenteel kan bereken is dat we 1 dag later zijn met datediff... Maar ik vind niet zo direct iets om ook het aantal uren in rekening te brengen...

Weet iemand raad?
 
PHP hulp

PHP hulp

21/05/2024 13:41:42
 
Ed

Ed

08/09/2008 20:02:00
Quote Anchor link
strtotime
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$diff
= (strtotime('2008-09-04 22:45:00') - strtotime('2008-09-03 21:45:00'));

echo $diff/60/60;

?>


Geeft netjes de melding 25. Het verschil wordt uitgedrukt in seconde's
 
Jurgen assaasas

Jurgen assaasas

08/09/2008 20:10:00
Quote Anchor link
Danny schreef op 08.09.2008 20:02:
strtotime
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$diff
= (strtotime('2008-09-04 22:45:00') - strtotime('2008-09-03 21:45:00'));

echo $diff/60/60;

?>


Geeft netjes de melding 25. Het verschil wordt uitgedrukt in seconde's


Dit doe je dus gewoon met SQL:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT datum + 1 DAYS + 1 HOUR + 25 MINUTES AS nieuw_datum;
Misschien niet correct, maar die richting moet je op.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Michiel

Michiel

08/09/2008 20:13:00
Quote Anchor link
Jurgen,

Wat jij post is niet wat ik nodig heb.

Ik moet gewoon van een gegeven datum altijd kunnen berekenen hoeveel tijd er tussen zit met de HUIDIGE datum en tijd

2008-09-03 21:45:00 (3 september 2008 21:45) = datum in database

2008-09-08 20:00 = huidige datum

het verschil tussen die twee is.... 4 dagen 23 uur ofzoiets

En dit moet berekend worden... De oplossing van Danny is volgens mij wel mogelijk.. Maar kan het niet beter?
Gewijzigd op 01/01/1970 01:00:00 door Michiel
 
Michiel

Michiel

08/09/2008 20:13:00
Quote Anchor link
sorry wou editen, maar deed een quote
Gewijzigd op 01/01/1970 01:00:00 door Michiel
 
Jurgen assaasas

Jurgen assaasas

08/09/2008 20:16:00
Quote Anchor link
Michiel schreef op 08.09.2008 20:13:
Jurgen,

Wat jij post is niet wat ik nodig heb.

Ik moet gewoon van een gegeven datum altijd kunnen berekenen hoeveel tijd er tussen zit.

2008-09-03 21:45:00 (3 september 2008 21:45) = datum in database

2008-09-08 20:00 = huidige datum

het verschil tussen die twee is.... 4 dagen 23 uur ofzoiets

En dit moet berekend worden... De oplossing van Danny is volgens mij wel mogelijk.. Maar kan het niet beter?



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT veld WHERE datum BETWEEN NOW() AND '2008-09-09 00:00:00';



Iets in die richting, die kun je met DATE_FORMAT(mySQL) weer opmaken.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Ed

Ed

08/09/2008 20:32:00
Quote Anchor link
Je kan er een mooie functie van maken, met twee inputs, en een returnarray met weken/dagen/uren/minuten/secondes.

Ik had wat tijd over:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php

function timediff($firstdate, $seconddate) {

/**
 * Author:     Danny van der Sluys
 * Contact:    [email protected]
 * Script:    Mogelijkheid om het verscil tussen twee datums uit te rekenen.
 * Version: 1.00
 */
// Start uitrekenen verschil.

if ( $firstdate < $seconddate) {
    //  Firstdate is kleiner, dus verminderen op de grootste waarde
    $diff = (strtotime($seconddate) - strtotime($firstdate));
}
else {
    // De seconddate is kleiner dus verminderen op de grootste waarde
    // Ook beide gelijke waardes word deze lus uitgevoerd.

    $diff = (strtotime($firstdate) - strtotime($seconddate));
}
// Einde berekenen verschil.

// Start met opbreken van het verschil.
// Weken uitrekenen

$returnarray['weken'] = floor($diff / (60*60*24*7));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24*7);

// Dagen uitrekenen
$returnarray['dagen'] = floor($diff / (60*60*24));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24);

// Uren uitrekenen
$returnarray['uren'] = floor($diff / (60*60));
// Weken van het verschil af halen.
$diff = $diff % (60*60);

// Minuten uitrekenen
$returnarray['minuten'] = floor($diff / 60);
// Weken van het verschil af halen.
$diff = $diff % 60;

// En ook de secondes retourneren.
$returnarray['secondes'] = $diff;

// Retourneren
return $returnarray;

}


$result = timediff('2008-09-03 21:45:00', '2008-10-04 22:48:10');

echo '<pre>';
print_r($result);
echo '</pre>';

?>
 
Robert Deiman

Robert Deiman

08/09/2008 20:41:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

/**
 * @author Robert Deiman
 * @copyright 2008
 * @param $startdate datestring This is the oldest date for the input (the smallest date)
 * @param $enddate datestring This is the youngest date for the input (the biggest date)
 * @param $showdays boolean If true, function returns the number of days and the rest of the time in hours. Otherwise it returns the number of hours. Default value = true.
 */





function timediff($startdate, $enddate, $showdays = true){
    //calculate difference in seconds
    $diff = (strtotime($enddate) - strtotime($startdate));
    //calculate difference in hours
    $number_hours = $diff/60/60;
    if($showdays == false){
        //return hours, as rounded value
        return round($number_hours);
        }

    
    elseif($showdays == true){
        $date = array();
        $date['days'] = floor($number_hours /24);
        $date['hours'] = round($number_hours  - $date['days'] * 24);
        
        if($date['days'] == 1){
            $date['daydesc'] = 'dag';
            }

        else{
            $date['daydesc'] = 'dagen';
            }

        
        return $date;
        }

    else{
        return 'U moet wel een geldige waarde opgeven voor $showdays.';
        }
    }


/* -------VOORBEELD-------- */

$startdatum = '2008-09-03 22:45:00';
$einddatum = '2008-09-04 23:47:51';

echo 'Het verschil tussen '.$einddatum.' en '.$startdatum.' is '.timediff($startdatum,$einddatum,false).' uur<br />';

$dagen = timediff($startdatum,$einddatum);
echo 'In dagen is het verschil tussen '.$einddatum.' en '.$startdatum.' is '.$dagen['days'].' '.$dagen['daydesc'].' en '.$dagen['hours'].' uur.';
?>


edit:
Ik had net gemist dat het om een database ging, dan laat je de database rekenen, die kan dit handiger/ sneller.

NOW() geeft in SQL de huidige tijd, en je kan deze vergelijken met een datum uit een datumveld.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Frank -

Frank -

08/09/2008 20:45:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  kolomnaam
FROM
  tabelnaam
WHERE
  datumtijd > (NOW() - INTERVAL 1 DAY - INTERVAL 1 HOUR - INTERVAL 25 MINUTE);
 
Michiel

Michiel

08/09/2008 20:58:00
Quote Anchor link
Bedankt voor de functies, hier kan ik zeker iets mee.

Ik weet niet wat de query van pgFrank zou doen voor mijn probleem..
 
Robert Deiman

Robert Deiman

08/09/2008 21:00:00
Quote Anchor link
@Michiel

De query van Frank selecteert alle data uit de database, waarbij de datum meer dan 1 dag, 1 uur en 25 minuten geleden is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.