Verschil in tijden berekenen met javascript en php
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.
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
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?
Kan je dat dan niet beter in PHP doen?
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).
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?
De MySQL-functie TIMEDIFF(expr1,expr2) retourneert expr1 - expr2 als een tijd:
@ 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
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 ;-)
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:
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:
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.
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
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:
Wel zijn "echte" datums en tijden als DATETIME OF TIMESTAMP beter.
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.
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?
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.




