Verschil in tijden berekenen met javascript en php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

11/06/2014 20:03:42
Quote Anchor link
Ik heb nu volgend script kunnen opbouwen met te knippen en te plakken van verschillende scipts die ik gevonden had. Ik kom er nog niet helemaal aan uit. Ik krijg de form er niet uit. Ik heb daarom de input velden 'hidden' gezet. Nu werkt het wel maar dat kan toch netter?

var date1 = new Date(document.fs.date1.value);
var date2 = new Date(document.fs.date2.value);

zullen moeten worden aangepast. Maar ik weet niet hoe. Ken te weinig van js.

De $date1 en $date2 variabelen zullen later uit de database komen maar daar kan ik weg mee.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE HTML>
<html lang="en">
<head>
<title></title>
</head>

<body onLoad="DifferenceCounter(45)">

<?php
$date1
= "06/10/2014 08:52:50 AM";
$date2 = "06/11/2014 08:52:50 AM";
?>


<form name="fs">

<input type="hidden" name="date1" id="date1" value ="<?php echo $date1; ?>" />
<input type="hidden" name="date2" id="date2" value ="<?php echo $date2; ?>" />

</form>

<div id="result1"></div>

<script>
function DifferenceCounter(){    

    var date1 = new Date(document.fs.date1.value);
      var date2 = new Date(document.fs.date2.value);
      var sec = (date2.getTime()/1000.0) - (date1.getTime()/1000.0);
    
    a = "<span style=\"font-size:10px;\">Van date: "+date1.toLocaleString()+" (epoch: "+(date1.getTime()/1000)+")<br>";
    a+= "Naar date: "+date2.toLocaleString()+" (epoch: "+(date2.getTime()/1000)+")<br><br></span>";
    a+= "Verschil tussen deze datums is: <b>"+TimeDifferenceCounter(sec)+"</b><br><br>";
    a+= "<table style=\"font-size:12px;\">";
    a+= "<tr><td>Difference in seconds:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td align=right><b>"+Math.round(sec)+"</b></td></tr>";
    a+= "<tr><td>Rounded difference in minutes:</td><td align=right><b>"+Math.round(sec/60)+"</b></td></tr>";
    a+= "<tr><td>Rounded difference in hours:</td><td align=right><b>"+Math.round(sec/60/60)+"</b></td></tr>";
    a+= "<tr><td>Rounded difference in days:</td><td align=right><b>"+Math.round(sec/60/60/24)+"</b></td></tr>";
    a+= "<tr><td>Rounded difference in months:</td><td align=right><b>"+Math.round(sec/2629743)+"</b></td></tr>";
    a+= "<tr><td>Rounded difference in years:</td><td align=right><b>"+Math.round(sec/31556926)+"</b></td></tr>";
    a+= "</table>";
    document.getElementById('result1').innerHTML = a;
}

function TimeDifferenceCounter(sec){
    var t = parseInt(sec);
    var years;var months;var days;
    if(t>31556926){
        years = parseInt(t/31556926); t = t-(years*31556926);        
    }
    if(t>2629743){
        months = parseInt(t/2629743); t = t-(months*2629743);    
    }
    if(t>86400){
        days = parseInt(t/86400); t = t-(days*86400);
    }
    var hours = parseInt(t/3600);
    t = t-(hours*3600);
    var minutes = parseInt(t/60);
    t = t-(minutes*60);
    var content = "";
    if(years)content+=years+" years";
    if(months){ if(content)content+=", "; content+=months+" maanden"; }
    if(days){ if(content)content+=", ";  content+=days+" dagen"; }
    if(hours||days){ if(content)content+=", "; content+=hours+" uren"; }
    if(content)content+=", "; content+=minutes+" minuten and "+t+" seconden.";
    return content;
}


</script>
 
</body>
</html>
Gewijzigd op 11/06/2014 20:04:14 door Brecht S
 
PHP hulp

PHP hulp

21/11/2024 22:47:25
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/06/2014 20:56:34
Quote Anchor link
Dus je wilt in javascript gaan rekenen met gegevens die met php uit de database haalt?
Kan je dat dan niet beter in PHP doen?
 
Brecht S

Brecht S

11/06/2014 21:02:59
Quote Anchor link
Als dat mogelijk is mag dat. Ik heb geen flauw idee hoe er aan te beginnen.

Misschien nog een detail. De variabelen $date1 en $date2 veranderen altijd.
Ik heb volgende 2 velden in de database: datum_tijd_login en datum_tijd_logout en daarvan wil ik dus per record het verschil gaan berekenen. Iedere keer dat er iemand inlogged op de site zal er een nieuw record gemaakt worden met zijn logintijd en logout tijd (als hij uitlogged natuurlijk).
Gewijzigd op 11/06/2014 21:37:24 door Brecht S
 
Brecht S

Brecht S

27/06/2014 13:02:09
Quote Anchor link
Kan iemand mij hier verder mee helpen?
 
Ward van der Put
Moderator

Ward van der Put

27/06/2014 13:39:38
Quote Anchor link
De MySQL-functie TIMEDIFF(expr1,expr2) retourneert expr1 - expr2 als een tijd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  datum_tijd_login,
  datum_tijd_logout,
  TIMEDIFF(datum_tijd_logout, datum_tijd_login) AS sessieduur
FROM
  tabelnaam
 
Brecht S

Brecht S

27/06/2014 14:51:40
Quote Anchor link
@ Ward: Ik veronderstel dat de tijd wel op een bepaalde manier in de db moet gestoken worden. Momenteel doe ik dat met date(...). Ik kan me voorstellen dat mysql die 2 niet van elkaar zal kunnen aftrekken op die manier (zie $date1 en $date2 in mijn code)? Of wel?
Gewijzigd op 27/06/2014 14:52:43 door Brecht S
 
Ward van der Put
Moderator

Ward van der Put

27/06/2014 15:07:20
Quote Anchor link
Probeer het gewoon eens. Als je twee tijden hebt in het kolomtype DATETIME of TIMESTAMP, kun je het verschil ertussen achterhalen met een tijdfunctie zoals TIMEDIFF(). Die tijdfunctie is er niet voor niets ;-)
 
Gerhard l

gerhard l

27/06/2014 15:09:12
Quote Anchor link
Dat ligt aan het type van je databaseveld, sla je ze op als varchar of als date?
Met een veldtype date (of datetime, timestamp etc.)kan je in je queries zulke berekeningen toepassen als hierboven is voorgedaan.

Als je ze als text opslaat (wat niet echt handig is) kan je er in PHP wel mee rekenen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$datetime1
= new DateTime("06/10/2014 08:52:50");
$datetime2 = new DateTime("07/11/2014 15:52:50");
$difference = $datetime1->diff($datetime2);
echo '<pre>';
print_r($difference);
?>
 
Brecht S

Brecht S

27/06/2014 15:10:22
Quote Anchor link
Het probleem is dat ik geen kolommen heb zoals DATETIME of TIMESTAMP maar ik heb VARCHAR's gebruikt om de date functie in op te slaan. Dus vermoed ik dat ik geen TIMEDIFF() zal kunnen gebruiken op deze manier.
Ik zal anders eens de kolommen aanpassen in mijn mysql en dan de code beetje herschrijven en dan proberen met TIMEDIFF().

@Gerard: zou dit ook lukken op jouw manier? Dan moet ik de VARCHAR's niet aanpassen in de db. Voor alle duidelijkheid sla ik mijn 2 tijden op in VARCHAR's kolommen.
Gewijzigd op 27/06/2014 15:13:13 door Brecht S
 
Ward van der Put
Moderator

Ward van der Put

27/06/2014 15:18:28
Quote Anchor link
Als je ze met de functie DATE() van MySQL zelf hebt opgeslagen als VARCHAR, kan MySQL ook de strings nog steeds met TIMEDIFF() vergelijken als tijden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
-- Resultaat is: 775:00:00 (dus 775 uur)
TIMEDIFF('2014-11-07 15:52:50', '2014-10-06 08:52:50')


Wel zijn "echte" datums en tijden als DATETIME OF TIMESTAMP beter.
 
Brecht S

Brecht S

27/06/2014 15:27:54
Quote Anchor link
Nee, ik heb ze opgeslagen met de php date(); in een VARCHAR kolom datum_start en VARCHAR kolom datum_end
Dus dan zal dit waarschijnlijk niet lukken op die manier?
 
Ward van der Put
Moderator

Ward van der Put

27/06/2014 15:30:31
Quote Anchor link
Dan hangt het af van de notatie die je date() hebt gebruikt. Is dat de ISO-notatie van MySQL, dan kan het wel. Is het een andere notatie, dan moet je het even testen om te controleren of MySQL de strings als tijden kan interpreteren.
 



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.