[PHP] Dagsoorten tellen tussen 2 timestamps

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

33999

Topicstarter
Hi,

Is het mogelijk om op een gemakkelijke manier de dagsoorten te tellen tussen 2 timestamps.
Bijv time stamp X en timestamp Y en dan in een array[maandag][aantal]
Zijn hier standaard functies voor?

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Nope, zijn geen standaard functies voor.

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 26-05 13:47
Een start. Niet getest overigens.
PHP:
1
2
3
4
5
6
7
8
$time_start = mktime(0, 0, 0, 1, 1, 2006);
$time_end = mktime(0, 0, 0, 1, 1, 2007);

$weekdagen = array();
for($i = 0 ; $i < 7 ; $i++) $weekdagen[$i] = ($time_end-$time_start)/(86400*7);
for($i = date('w', $time_start ; $i < 7 ; $i++) $weekdagen[$i]++;
for($i = 0 ; $i < date('w', $time_end ; $i++) $weekdagen[$i]++;
print_r($weekdagen);

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Je kan toch gewoon domweg het aantal weken tellen, en van de resterende dagen kijken óf er bijvoorbeeld een maandag tussen zit?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 09-06 21:17
Bepaal de dag van je start timestamp en van je eind-timestamp, en de dagen er tussenin zijn van toepassing. Tenzij erde timestamps meer dan 1 week omslaan, dan zijn alle dagen van toepassing;

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Kun je niet iets met strftime in combinatie met de set_locale() functie.

Ik stel met zoiets voor (uit m'n hoofd)

PHP:
1
2
3
4
5
6
7
8
9
set_locale(LC_TIME, 'nl_NL');
$start = <starttijd>;
$end = <eindtijd>;
$dagen = array();
for ( var $i = $start; $i < $end; $i += 24 * 60 * 60 ) { // steeds een dag verder.
  $dag = strftime('%A', $i);
  if ( !isset($dagen[$dag]) ) $dagen[$dag] = 0;
  $dagen[$dag++;
} // for()


Je $dagen array bevat dan alle weekdagen met het aantal keren dat deze voorkomt in de aangegeven tijdspanne. Voorwaarde is overigens wel dat je server de 'nl_NL' locale kent ... anders worden het 'default' de weekdagen in de taal zoals die als standaard is ingesteld op je server.

Acties:
  • 0 Henk 'm!

33999

Topicstarter
Ik moest het nu dan ook daadwerkelijk realiseren en heb even snel dit gemaakt:
code:
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
<?php
//Unix Timestamp: 1160458283 
//RFC2822 Date: Tue, 10 Oct 2006 05:31:23 +0000 

//Unix Timestamp: 1161149483 
//RFC2822 Date: Wed, 18 Oct 2006 05:31:23 +0000 

//w - dag van de week, numeriek, dus "0" (Zondag) tot "6" (Zaterdag) 

$van = 1160458283;
$tot = 1161149483;

function tel_dagsoorten($van, $tot)
{
    $dag = 60 * 60 * 24;

    while($van < $tot)
    {
        $dagsoort = date('w', $van);

        $dagen[$dagsoort]->aantal++;

        $van = $van + $dag;
    }

    print_r($dagen);
}

tel_dagsoorten($van, $tot);


Misschien heeft iemand er iets aan of zou iemand het anders doen, ik hoor het graag :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Sowieso is het handiger om in weken te rekenen. Je kan álle dagsoorten met één verhogen zolang je één week erbij kan tellen zonder over $tot heen te gaan. Op die manier versnel je je loop alvast. Je kan dus simpelweg kijken hoeveel weken er tussen $van en $tot zitten, en op basis daarvan (zonder loop!) alle dagen in je array ophogen. Daarna kun je het restant van de dagen nog in een loopje afhandelen. Een loopje dat dus in het slechtste geval 6 keer itereert. Lijkt me wat handiger dan je huidige berekening, die een iteratie per dag nodig heeft. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1