String converteren naar datum zodat die met de huidige datum kan vergelijken
stap 1:
Code (php)
Ik kan er niet achter komen waarom dit nu dit nu "1 jamuari 1970" is.
stap 2:
Vervolgens wil ik deze datum vergelijken met de "datum van vandaag + 7 dagen". Dus:
Code (php)
Heeft iemand een idee?
Nico
http://nl3.php.net/manual/en/function.strtotime.php
En het format waarmee je kan vergelijken is YYYY-MM-DD.
Zie En het format waarmee je kan vergelijken is YYYY-MM-DD.
De unix-timestamp waarmee de php datum functies werken is een seconden teller die telt vanaf 1 januari 1970 middernacht. als de timestamp op 0 staat dan krijg je dus 1 jan 1970 als datum. tel je hier 60 x 60 x 24 (sec x min x uur) bij op dan krijg je 2 januari 1970 enz.
Dit geeft 0 terug. En dus kan PHP er niets mee.
Even zelf wijzigen naar:
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
$en = array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'oct', 'nov', 'dec');
$nl = array('jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'okt', 'nov', 'dec');
$speeldatum_org = '6/oktober/2012';
$speeldatum = $speeldatum_org;
$speeldatum = explode('/', $speeldatum); // is nu 0=6; 1=oktober; 2=2012
$speeldatum[1] = substr($speeldatum[1], 0, 3); // oktober > okt
$speeldatum[1] = str_replace($nl, $en, $speeldatum[1]); // okt > oct
$speeldatum = implode(' ', $speeldatum); // is nu 6 oct 2012
$speeldatum = strtotime($speeldatum); // maakt er een UNIX-timestamp van
echo $speeldatum_org.' > '.$speeldatum.' >> '.date("j/F/Y", $speeldatum);
?>
$en = array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'oct', 'nov', 'dec');
$nl = array('jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'okt', 'nov', 'dec');
$speeldatum_org = '6/oktober/2012';
$speeldatum = $speeldatum_org;
$speeldatum = explode('/', $speeldatum); // is nu 0=6; 1=oktober; 2=2012
$speeldatum[1] = substr($speeldatum[1], 0, 3); // oktober > okt
$speeldatum[1] = str_replace($nl, $en, $speeldatum[1]); // okt > oct
$speeldatum = implode(' ', $speeldatum); // is nu 6 oct 2012
$speeldatum = strtotime($speeldatum); // maakt er een UNIX-timestamp van
echo $speeldatum_org.' > '.$speeldatum.' >> '.date("j/F/Y", $speeldatum);
?>
Gewijzigd op 05/10/2012 09:40:46 door Eddy E
Bedankt voor jullie reactie maar de oplossing van Eddy werkt. Ik was al wel met strtotime bezig, maar de crux zat hem natuurlijk in mijn nederlandse maanden... nooit aan gedacht.
Nogmaals bedankt voor de snelle reactie.
Nico
Maar mijn vraag is: hoe kom je ooit aan 6/oktober/2012? Want dat is echt een heel ongebruikelijk formaat (en terecht!).
Ik weet niet waar het vandaan komt, maar je zou het daar wellicht al kunnen aanpassen?
Bovenstaande code is nogal uitgeschreven en kan natuurlijk veel compacter. Zo zou je in de (zowel engelse als nederlandse) array de maanden 'jan', 'feb' etc niet op hoeven te nemen. Die blijven toch hetzelfde.
Toevoeging op 06/10/2012 08:55:06:
En als functie, ook wat flexibeler (neemt ook oktober/7/2012 aan):
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function slashes_date_to_date($input, $format = "j/F/Y")
{
$date = explode('/', strtolower($input));
foreach ($date as $part)
{
if (!is_numeric($part))
{
$part = str_replace(array('mar', 'may', 'oct'), array('maa', 'mei', 'okt'), substr($part, 0, 3));
}
$date[] = $part;
}
return date($format, strtotime(implode(' ', $date)));
}
$speeldatum = '6/oktober/2012';
echo slashes_date_to_date($speeldatum);
// 2012-10-06
?>
function slashes_date_to_date($input, $format = "j/F/Y")
{
$date = explode('/', strtolower($input));
foreach ($date as $part)
{
if (!is_numeric($part))
{
$part = str_replace(array('mar', 'may', 'oct'), array('maa', 'mei', 'okt'), substr($part, 0, 3));
}
$date[] = $part;
}
return date($format, strtotime(implode(' ', $date)));
}
$speeldatum = '6/oktober/2012';
echo slashes_date_to_date($speeldatum);
// 2012-10-06
?>
Gewijzigd op 06/10/2012 10:21:49 door Eddy E
Nou dat zit zo... Ik lees een programma in via een rss feed. Daar staat '6 oktober' verder niets. Er wordt vanuit gegaan - en terecht- dat de lezer zelf kan bepalen of dit in het huidige jaar is of het komende jaar omdat het seizoen loopt van augustus t/m mei. Daar plak ik zelf 2012 resp. 2013 afhankelijk wat de speeldatum is. Ja en dan heb je '6 oktober 2012'. En misschien dat ik het daar al direct recht kan zetten maar ik heb nu je voorbeeld gevolgd en dat werkt. Ik heb vrij veel programmeer ervaring maar ik ben niet echt een php'er, hoewel ik het ontzettend leuk vindt om dit soort dingen te maken. En datums vind ik altijd een geklungel.
Nogmaals bedankt voor dit voorbeeld.