String converteren naar datum zodat die met de huidige datum kan vergelijken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nkamp Kamp van de

nkamp Kamp van de

04/10/2012 22:58:35
Quote Anchor link
Ik heb het volgende
stap 1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$speel_datum
= ' 6/oktober/2012'; //is een samengestelde string uit text gehaald
$dateInfo = date('j/F/Y', trim($speel_datum));

//Dit geeft dan het volgende resultaat:
echo $dateInfo;   //= 1/January/1970!!?? dus het formaat is niet goed?
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$format
= 'd-m-Y';
$date = date ( $format );

if (strtotime($dateInfo) < strtotime(date ( $format, strtotime ( '-7 day' . $date ))) ) {
//doe iets
} else {
//doe iets anders
}
?>


Heeft iemand een idee?

Nico
 
PHP hulp

PHP hulp

22/12/2024 09:28:34
 
- SanThe -

- SanThe -

04/10/2012 23:17:47
Quote Anchor link
Zie http://nl3.php.net/manual/en/function.strtotime.php
En het format waarmee je kan vergelijken is YYYY-MM-DD.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/10/2012 00:53:08
Quote Anchor link
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.
 
Eddy E

Eddy E

05/10/2012 07:45:42
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$speel_datum
= strtotime('6/oktober/2012');
?>


Dit geeft 0 terug. En dus kan PHP er niets mee.
Even zelf wijzigen naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
Gewijzigd op 05/10/2012 09:40:46 door Eddy E
 
Nkamp Kamp van de

nkamp Kamp van de

05/10/2012 22:17:43
Quote Anchor link
Hallo,

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
 
Eddy E

Eddy E

06/10/2012 08:31:31
Quote Anchor link
Graag gedaan.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>
Gewijzigd op 06/10/2012 10:21:49 door Eddy E
 
Nkamp Kamp van de

nkamp Kamp van de

06/10/2012 10:20:27
Quote Anchor link
Hoe ik aan 6/oktober/2012 kom?

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.