Lastig stukje datum omzetten.
Ik zit met een voor mij ingewikkeld probleem, wat ik zal proberen uit te leggen.
Ik heb in een database twee kolommen: datum_van / datum_tot in het formaat: 2009-03-13 / 2009-03-16
Dan moet het verschil tussen die twee data worden uitgerekend, en alle tussenliggende data in een array met datums worden gezet. Dit lukt met een functie die ik al heb.
Dan moet uit die array de dagen, maanden en jaren worden ge-echo`d als:
if (
$day == '14' AND $m == '03' AND $y == '2010' OR etc.
Dit moet dus gebeuren met alle data`s in de tabel.
Ik heb nu na anderhalve dag het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
//////// FUNCTIE OM HET VERSCHIL TUSSEN TWEE DATA`S IN EEN ARRAY TE STOPPEN
// Bijv. 2009-03-02 2009-03-06 wordt: 2009-03-02 2009-03-03 2009-03-03 etc.
function createDateRangeArray($strDateFrom,$strDateTo) {
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4));
if ($iDateTo>=$iDateFrom) {
array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
while ($iDateFrom<$iDateTo) {
$iDateFrom+=86400; // add 24 hours
array_push($aryRange,date('Y-m-d',$iDateFrom));
} } return $aryRange; } ?>
//////// FUNCTIE OM HET VERSCHIL TUSSEN TWEE DATA`S IN EEN ARRAY TE STOPPEN
// Bijv. 2009-03-02 2009-03-06 wordt: 2009-03-02 2009-03-03 2009-03-03 etc.
function createDateRangeArray($strDateFrom,$strDateTo) {
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4));
if ($iDateTo>=$iDateFrom) {
array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
while ($iDateFrom<$iDateTo) {
$iDateFrom+=86400; // add 24 hours
array_push($aryRange,date('Y-m-d',$iDateFrom));
} } return $aryRange; } ?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
//////// DATA`S UIT DB HALEN EN OMZETTEN
include "connect.php";
$result = mysql_query("SELECT * FROM reserveringen")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
}
?>
//////// DATA`S UIT DB HALEN EN OMZETTEN
include "connect.php";
$result = mysql_query("SELECT * FROM reserveringen")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
}
?>
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
/////// ZO GEBRUIK JE DE "DATUMVERSCHIL IN ARRAY STOPPEN" FUNCTIE
$strDateFrom='2007-02-15';
$strDateTo='2007-02-20';
$aryDates=createDateRangeArray($strDateFrom,$strDateTo);
print_r ($aryDates);
?>
/////// ZO GEBRUIK JE DE "DATUMVERSCHIL IN ARRAY STOPPEN" FUNCTIE
$strDateFrom='2007-02-15';
$strDateTo='2007-02-20';
$aryDates=createDateRangeArray($strDateFrom,$strDateTo);
print_r ($aryDates);
?>
En nu zit ik vast. Ik hoop dat iemand me een voorbeeldje of wat steekwoorden kan geven waardoor ik verder kan.
Alvast bedankt! Collin
Gewijzigd op 01/01/1970 01:00:00 door Collin Php
Collin schreef op 13.03.2009 15:34:
in het formaat: 13-03-2009 / 16-03-2009
Dat zijn ook geen datums, dat is tekst.
Pas eerst je datamodel eens aan.
SanThe schreef op 13.03.2009 15:41:
Dat zijn ook geen datums, dat is tekst.
Pas eerst je datamodel eens aan.
Collin schreef op 13.03.2009 15:34:
in het formaat: 13-03-2009 / 16-03-2009
Dat zijn ook geen datums, dat is tekst.
Pas eerst je datamodel eens aan.
Doe ik dat door een ander type kolom te maken in mn database? (date kolom) ?
Gewijzigd op 01/01/1970 01:00:00 door Collin Php
DATE (of DATETIME als er ook tijd bij moet)
SanThe schreef op 13.03.2009 15:46:
DATE (of DATETIME als er ook tijd bij moet)
Oke thnx dat is gelukt! En nu :p
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//////// DATA`S UIT DB HALEN EN OMZETTEN
include "connect.php";
$result = mysql_query("SELECT * FROM reserveringen")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
/////// ZO GEBRUIK JE DE "DATUMVERSCHIL IN ARRAY STOPPEN" FUNCTIE
$strDateFrom= $row['datum_van'];
$strDateTo= $row['datum_tot'];
$aryDates=createDateRangeArray($strDateFrom,$strDateTo);
print_r ($aryDates);
}
?>
//////// DATA`S UIT DB HALEN EN OMZETTEN
include "connect.php";
$result = mysql_query("SELECT * FROM reserveringen")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
/////// ZO GEBRUIK JE DE "DATUMVERSCHIL IN ARRAY STOPPEN" FUNCTIE
$strDateFrom= $row['datum_van'];
$strDateTo= $row['datum_tot'];
$aryDates=createDateRangeArray($strDateFrom,$strDateTo);
print_r ($aryDates);
}
?>
Uitkomst:
Array ( [0] => 2009-03-10 [1] => 2009-03-11 [2] => 2009-03-12 [3] => 2009-03-13 [4] => 2009-03-14 [5] => 2009-03-15 [6] => 2009-03-16 [7] => 2009-03-17 ) Array ( [0] => 2009-04-01 [1] => 2009-04-02 [2] => 2009-04-03 )
Nu moeten dus alleen nog alle data`s uit alle arrays worden uitgespuugt als:
$day == '14' AND $m == '03' AND $y == '2010' OR
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door Collin Php
Code (php)
1
2
3
2
3
<?php
$sql = 'SELECT DATEDIFF(datum_tot,datum_var) AS daysbetween FROM reserveringen';
?>
$sql = 'SELECT DATEDIFF(datum_tot,datum_var) AS daysbetween FROM reserveringen';
?>
Geeft het aantal dagen tussen twee datums terug. Houd er wel rekening mee dat dit dus alleen op date, datetime of timestamp kolommen werkt.
Als ik: print_r ($aryDates); doe zie ik:
Array ( [0] => 2009-03-10 [1] => 2009-03-11 [2] => 2009-03-12 [3] => 2009-03-13 [4] => 2009-03-14 [5] => 2009-03-15 [6] => 2009-03-16 [7] => 2009-03-17 ) Array ( [0] => 2009-04-01 [1] => 2009-04-02 [2] => 2009-04-03 )
Nu moeten dus alle values uit de array worden gehaald en worden ge-echo-ed als:
$day == '14' AND $m == '03' AND $y == '2010' OR
Moet ik niet iets met while doen?
@SanThe: Ik zal er op letten :)
@Jepzur: Ik heb ook het idee dat ik met jouw code wel iets kan, alleen snap ik niet hoe ik het moet gebruiken...
Gewijzigd op 01/01/1970 01:00:00 door Collin Php
Jezpur schreef op 13.03.2009 17:40:
Thnx dat lijkt te werken!
Nu moet ik alleen het volgende binnen een if ( doen:
foreach($aryDates as $datum) {
list($y, $m, $d) = explode("-", $datum);
print "$";
print "day == '";
echo $d;
print "' AND $";
print "m == '";
echo $m;
print "' AND $";
print "y == '";
echo $y;
print "' OR ";
En dat werkt dus niet. Als ik het lost uitvoer werkt het wel:
if ( $day == '10' AND $m == '03' AND $y == '2009' OR $day == '11' AND $m == '03' AND $y == '2009' OR $day == '12' AND $m == '03' AND $y == '2009' OR $day == '13' AND $m == '03' AND $y == '2009' OR $day == '14' AND $m == '03' AND $y == '2009' OR $day == '15' AND $m == '03' AND $y == '2009' OR $day == '16' AND $m == '03' AND $y == '2009' OR $day == '17' AND $m == '03' AND $y == '2009' OR if ( $day == '01' AND $m == '04' AND $y == '2009' OR $day == '02' AND $m == '04' AND $y == '2009' OR $day == '03' AND $m == '04' AND $y == '2009' OR
(moet ik alleen de laatste or nog weghalen)
Is er een soort echo commando die ook commando`s kan echo-en?
EDIT:
Dit is trouwens hoe het er uiteindelijk uit moet komen te zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if (
$day == '10' AND $m == '03' AND $y == '2009' OR $day == '11' AND $m == '03' AND $y == '2009' OR $day == '12' AND $m == '03' AND $y == '2009' OR $day == '13' AND $m == '03' AND $y == '2009' OR $day == '14' AND $m == '03' AND $y == '2009'
) {
echo("<td style='background-color:#900' align=\"center\"$class>$day</td>");
} else {
// add form data processing code here
echo("<td align=\"center\"$class><a href=\"javascript:selectDay('".str_pad($day, 2, "0", STR_PAD_LEFT)."');\">$day</a></td>");
};
?>
if (
$day == '10' AND $m == '03' AND $y == '2009' OR $day == '11' AND $m == '03' AND $y == '2009' OR $day == '12' AND $m == '03' AND $y == '2009' OR $day == '13' AND $m == '03' AND $y == '2009' OR $day == '14' AND $m == '03' AND $y == '2009'
) {
echo("<td style='background-color:#900' align=\"center\"$class>$day</td>");
} else {
// add form data processing code here
echo("<td align=\"center\"$class><a href=\"javascript:selectDay('".str_pad($day, 2, "0", STR_PAD_LEFT)."');\">$day</a></td>");
};
?>
Gewijzigd op 01/01/1970 01:00:00 door Collin Php