Dagen, uren, minuten, seconden berekenen

Gestart doorDylan7 reacties91 weergaven

8 berichten · pagina 1 van 1

Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Hoi,

Hoe kan je de dagen, uren, minuten, seconden bereken uit een aantal miliseconden?

Ik heb tot nu toe dit:
Database:
Afbeelding

PHP:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9


while($veiling = $data->fetch_object()) {
$veiling->status = preg_replace(/[0]/, Lopend, $veiling->status);
$veiling->status = preg_replace(/[1]/, Verlopen, $veiling->status);
$veiling->expire = (strtotime(now) - strtotime($veiling->expire));
$veiling->username = findUsername($veiling->uId);

$output[] = $veiling;
}


En JS:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

var app = angular.module(tradeFilters, []);

app.filter(calcExpire, function() {
return function(input) {
input = input * 1000;

var daysMod = input % 86400000;
var days = (input - daysMod) / 86400000;

var hoursMod = input % 3600000;
var hours = (input - hoursMod) / 3600000;

var minutesMod = input % 60000;
var minutes = (input - minutesMod) / 60000;

var secondsMod = input % 1000;
var seconds = (input - secondsMod) / 1000;

return days + " dagen " + hours + " uren " + minutes + " minuten " + seconds + " seconden";
}
});

Maar helaas krijg ik dit terug:
2014-08-06 00:00:00 => 5 dagen 138 uren 8331 minuten 499861 seconden
2014-08-20 16:01:56 => 8 dagen -213 uren -12790 minuten -767455 seconden

Dus er klopt niks vanconfused, weet iemand wat er fout is?
0
Berichten
3.001
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Hoi,

Hoe kan je de dagen, uren, minuten, seconden bereken uit een aantal miliseconden?

Ik heb tot nu toe dit:
Database:
Afbeelding

PHP:

Codeblok (voorbeeld.php):
1
2
3
4
5
6
7
8
9


while($veiling = $data->fetch_object()) {
$veiling->status = preg_replace(/[0]/, Lopend, $veiling->status);
$veiling->status = preg_replace(/[1]/, Verlopen, $veiling->status);
$veiling->expire = (strtotime(now) - strtotime($veiling->expire));
$veiling->username = findUsername($veiling->uId);

$output[] = $veiling;
}


En JS:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

var app = angular.module(tradeFilters, []);

app.filter(calcExpire, function() {
return function(input) {
input = input * 1000;

var daysMod = input % 86400000;
var days = (input - daysMod) / 86400000;

var hoursMod = input % 3600000;
var hours = (input - hoursMod) / 3600000;

var minutesMod = input % 60000;
var minutes = (input - minutesMod) / 60000;

var secondsMod = input % 1000;
var seconds = (input - secondsMod) / 1000;

return days + " dagen " + hours + " uren " + minutes + " minuten " + seconds + " seconden";
}
});

Maar helaas krijg ik dit terug:
2014-08-06 00:00:00 => 5 dagen 138 uren 8331 minuten 499861 seconden
2014-08-20 16:01:56 => 8 dagen -213 uren -12790 minuten -767455 seconden

Dus er klopt niks vanconfused, weet iemand wat er fout is?

Je moet de dagen uitrekenen in helen, daarna van de rest die je hebt van de dagen de uren uitrekenen in helen, daarna van die rest weer de minuten en van de rest van de minuten de seconden.
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Codeblok (voorbeeld.php):

1
2

$veiling->expire = (strtotime(now) - strtotime($veiling->expire));

Je weet dat dit een negatieve waarde geeft als de datum in de toekomst ligt? Vandaar die mintekens. Plus dat wat Bugged zegt, je moet voor het berekenen van de volgende waarde steeds de ...Mod van de vorige gebruiken. (dus bij hoursMod moet je daysMod % 3600000 gebruiken en bij hourse (daysMod - hoursMod).. blabla)

Is er trouwens een bepaalde reden voor de input = input * 1000; ? Of wil je gewoon grote getallen gebruiken in je script?
0
Berichten
1.684
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

function calc(input) {
input = input * 1000;

var daysMod = input % 86400000;
var days = (input - daysMod) / 86400000;

var hoursMod = daysMod % 3600000;
var hours = (daysMod - hoursMod) / 3600000;

var minutesMod = hoursMod % 60000;
var minutes = (hoursMod - minutesMod) / 60000;

var secondsMod = minutesMod % 1000;
var seconds = (minutesMod - secondsMod) / 1000;

return days + " dagen " + hours + " uren " + minutes + " minuten " + seconds + " seconden";
}

console.log(calc(850332802951695400));

Dit zou moeten werken. biggrin
Dit was het stukje dat ik je in het offtopic gegeven had. Helaas had je het fout overgenomen. smile Nu, dit is mijn manier, maar ik ben zeker dat het efficiënter kan.

EDIT: Die * 1000 heeft eigenlijk geen zin. Je kan i.p.v. millis ook sec gebruiken bij het uitrekenen.
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Toch een oud topic maar ik heb nu het zo gemaakt:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = 0;
do {
$days++;
$uptime -= 86400;
}
while($uptime > 86399);

$uren = 0;
do {
$uren++;
$uptime -= 3600;
}
while($uptime > 3599);
$minutes = 0;

do {
$minutes++;
$uptime -= 60;
}
while($uptime > 59);

Of is er een betere manier?

toevoeging op 15 mei 2015, 20:08:09:
Of wacht die do while moet niet zo.emo
toevoeging op 15 mei 2015, 201019:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = 0;
while($uptime > 86399){
$days++;
$uptime -= 86400;
};


$uren = 0;
while($uptime > 3599){
$uren++;
$uptime -= 3600;
};

$minutes = 0;

while($uptime > 59) {
$minutes++;
$uptime -= 60;
};
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Je kunt ook gewoon met de modulo operator werken.

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = floor($uptime / 86400);

$uptime = $uptime % 86400;
$uren = floor($uptime / 3600);

$uptime = $uptime % 3600;
$minutes = floor($uptime / 3600);

$seconds = $uptime % 60;

toevoeging op 15 mei 2015, 20:20:12:
@Dylan

toevoeging op 15 mei 2015, 20:21:06:
edit: oh dat werd daarvoor dus al gedaan emoIk zou die modulo gewoon gebruiken ipv while loops. While loops zijn erg overbodig hier..
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
aaha nu begrijp ik het eindelijksmile
Nog beter

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = floor($uptime / 86400);
$uptime %= 86400;
$uren = floor($uptime / 3600);
$uptime %= 3600;
$minuten = floor($uptime / 60);

@Sjoerd
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Dylan schreef:
Toch een oud topic maar ik heb nu het zo gemaakt:
Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = 0;
do {
$days++;
$uptime -= 86400;
}
while($uptime > 86399);

$uren = 0;
do {
$uren++;
$uptime -= 3600;
}
while($uptime > 3599);
$minutes = 0;

do {
$minutes++;
$uptime -= 60;
}
while($uptime > 59);

Of is er een betere manier?

toevoeging op 15 mei 2015, 20:08:09:
Of wacht die do while moet niet zo.emo
toevoeging op 15 mei 2015, 201019:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


#uptime
$uptime = (int) explode(" ", shell_exec("cat /proc/uptime"))[0];
$days = 0;
while($uptime > 86399){
$days++;
$uptime -= 86400;
};


$uren = 0;
while($uptime > 3599){
$uren++;
$uptime -= 3600;
};

$minutes = 0;

while($uptime > 59) {
$minutes++;
$uptime -= 60;
};


Dit is de eerste keer dat ik het iemand zie oplossen met while emoEn volgens mij is het ook niet echt een nette manier om dit op te lossen yummie
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren