Verschil in tijden berekenen met javascript en php
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)
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
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: </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>
<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: </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
Kan je dat dan niet beter in PHP doen?
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
Kan iemand mij hier verder mee helpen?
Gewijzigd op 27/06/2014 14:52:43 door Brecht S
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 ;-)
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:
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
Code (php)
1
2
2
-- Resultaat is: 775:00:00 (dus 775 uur)
TIMEDIFF('2014-11-07 15:52:50', '2014-10-06 08:52:50')
TIMEDIFF('2014-11-07 15:52:50', '2014-10-06 08:52:50')
Wel zijn "echte" datums en tijden als DATETIME OF TIMESTAMP beter.
Dus dan zal dit waarschijnlijk niet lukken op die manier?
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.