[php] datum string uitelkaar trekken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sharkzor
  • Registratie: Maart 2000
  • Laatst online: 20-09 21:04
ik loop nu al een tijdje te zoeken, maar echt ver kom ik niet.
van regular expressions krijg ik gewoon hoofdpijn, maar volgens mij moet het daarmee lukken.

een pagina krijgt met een post een datum door in het dd-mm-yyyy formaat (vb: 4-12-2005)
nu wil ik jaartal en dag omdraaien zodat het 2005-12-4 word (moet in dat formaat in een mysql database).

loop te googlen en te gotten, maar kom geen stap verder...

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:01
Je slaat je datum toch niet op in een varchar / char veld ?

Wat heb je zelf al , en wat lukt er precies niet ?

[ Voor 32% gewijzigd door whoami op 29-11-2005 14:14 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 17:36

Koppensneller

winterrrrrr

Krijg je de dag (dus 4 in je voorbeeld) met of zonder voorloopnullen?

Acties:
  • 0 Henk 'm!

  • Gurbe de n00b
  • Registratie: Juni 2003
  • Laatst online: 08-02-2024
Je date() is nu waarschijnlijk:

date(t-i-Y);

en daar maak je van:

date(Y-i-t);

:)

Portfolio


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

PHP:
1
implode('-',array_reverse(explode('-',$datum)))


oid? :P RE zijn beetje overkill hier lijkt me..

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Een vrij triviaal 'probleempje'. Als de datum een string is, kun je dit vrij makkelijk exploden en de volgorde omdraaien.

PHP:
1
2
3
    $datum = "4-12-2005";
    explode('-', $datum);
    $geformatteDatum = $datum[2] . '-' . $datum[1] . '-' . $datum[0];

Acties:
  • 0 Henk 'm!

Verwijderd

Na bovenstaande oplossingen zal ik nog even als spuit 11 komen:
PHP:
1
2
3
4
5
6
7
function draaiDatumOm($datumIn){//$datumIn = dd-mm-jjjj
    if($datumIn != ''){
        list ($dag, $maand, $jaar) = split ('[/.-]', $datumIn);
        $datum = substr($jaar, 0, 4)."-".$maand."-".$dag;
        return $datum;
    }
}

Dit werkt voor mij in ieder geval goed.

Acties:
  • 0 Henk 'm!

  • sharkzor
  • Registratie: Maart 2000
  • Laatst online: 20-09 21:04
prototype schreef op dinsdag 29 november 2005 @ 14:20:
Een vrij triviaal 'probleempje'. Als de datum een string is, kun je dit vrij makkelijk exploden en de volgorde omdraaien.

PHP:
1
2
3
    $datum = "4-12-2005";
    explode('-', $datum);
    $geformatteDatum = $datum[2] . '-' . $datum[1] . '-' . $datum[0];
kijk! dat werkt. tenminste, moest er nog ffe $datum = explode('-', $datum); van maken.
zat alleen nog een white space in, ffe weggehaald met ereg_replace. is dat een beetje correct?
tnx for da help.

PHP:
1
2
3
4
5
6
$datum = $_POST['publicatiedatum'];
echo $datum;
$datum = ereg_replace(" ", "", $datum);
$datum = explode('-', $datum); 
$geformatteDatum = $datum[2] . '-' . $datum[1] . '-' . $datum[0]; 
echo $geformatteDatum;

[ Voor 21% gewijzigd door sharkzor op 29-11-2005 14:34 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

sharkzor schreef op dinsdag 29 november 2005 @ 14:33:
[...]


kijk! dat werkt. tenminste, moest er nog ffe $datum = explode('-', $datum); van maken.
zat alleen nog een white space in, ffe weggehaald met ereg_replace. is dat een beetje correct?
tnx for da help.

PHP:
1
2
3
4
5
6
$datum = $_POST['publicatiedatum'];
echo $datum;
$datum = ereg_replace(" ", "", $datum);
$datum = explode('-', $datum); 
$geformatteDatum = $datum[2] . '-' . $datum[1] . '-' . $datum[0]; 
echo $geformatteDatum;
ereg_replace is voor een regular expression replace. Dat is overkill, als je whitespaces wil verwijderen kun je net zo goed de snellere str_replace gebruiken, aangezien je niet een pattern match wil doen. Dus $datum=str_replace(' ', '', $datum);
Let er wel even op dat een spatie niet de enige is die onder de noemer whitespace valt (\t,\r\n etc..)

[ Voor 13% gewijzigd door prototype op 29-11-2005 14:49 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
* T-MOB zou whitespace verwijderen met trim()

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Bosmonster schreef op dinsdag 29 november 2005 @ 14:20:
PHP:
1
implode('-',array_reverse(explode('-',$datum)))


oid? :P RE zijn beetje overkill hier lijkt me..
Waarom ziet TS deze oplossing niet staan, die Bosmonster perfect aandraagt? Lijkt me de ideale oplossing. Einde nutteloos bericht..

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

T-MOB schreef op dinsdag 29 november 2005 @ 15:10:
* T-MOB zou whitespace verwijderen met trim()
Trim verwijdert alleen de whitespaces aan het begin en einde van de string toch? Dat biedt geen uitkomst dan in het welliswaar zeer onwaarschijnlijk, doch mogelijke geval dat je dit hebt: "20 05- 0 5 - 4"

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op dinsdag 29 november 2005 @ 15:13:
[...]


Waarom ziet TS deze oplossing niet staan, die Bosmonster perfect aandraagt? Lijkt me de ideale oplossing. Einde nutteloos bericht..
Hij wil onderlinge whitespaces ook verwijderen, en ik neem even aan dat ie input bedoelt als:

2005 - 05 - 22 (en niet overal tussendoor spaties :P)

In dat geval kunnen we er nog wel een vierde functie tussenproppen (lang leve php).

PHP:
1
implode('-',array_map('trim',array_reverse(explode('-',$datum))))


:+

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Je zou ook gewoon de gebruiker geen mogenlijkheid kunnen geven en selectboxen gebruiken. Als je het helemaal makkelijk wilt maken hoef je server side dan alleen maar een check erop te zetten dat de datum wel bestaat (31-2 etc :P)

Maar dat is wel een stuk makkelijker dan gokken dat de gebruiker een juiste datum gaat invoeren. Gebruikers kunnen nogal rare dingen doen :P

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

disjfa schreef op dinsdag 29 november 2005 @ 15:36:
Je zou ook gewoon de gebruiker geen mogenlijkheid kunnen geven en selectboxen gebruiken. Als je het helemaal makkelijk wilt maken hoef je server side dan alleen maar een check erop te zetten dat de datum wel bestaat (31-2 etc :P)

Maar dat is wel een stuk makkelijker dan gokken dat de gebruiker een juiste datum gaat invoeren. Gebruikers kunnen nogal rare dingen doen :P
Hangt van de applicatie af. Als er regelmatig datums ingevoerd moeten worden door gebruikers die er regelmatig mee werken, dan is een simpel invoerveld natuurlijk een stuk sneller dan selectboxes. Het is een kleine moeite die input serverside te controleren (normaliter even uit elkaar trekken, kijken voor 3 elementen, checkdate, klaar)

Gaat het om een inschrijfformulier ofzo waar je een geboortedatum op moet geven.. tja, dan zou ik ook voor de foolproof selectboxes gaan :)

[ Voor 8% gewijzigd door Bosmonster op 29-11-2005 15:39 ]


Acties:
  • 0 Henk 'm!

  • Arto
  • Registratie: November 2005
  • Laatst online: 20-09 21:40
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$datum = "18-10-1990";

$replace = "\\3" . " - " . "\\2" . " - " . "\\1";
$expression = "/(.[0-9])\-(.[0-9])\-(...[0-9])/s";
if(preg_match($expression, $datum)
{
    $datum = preg_replace($expression,$replace ,$datum);
} else {
    // ongeldige datum
}
?>


zoiets bedoelde je met je regular expressions? :)
misschien wat ingewikkelder maar er zit ook meteen een controle op
Pagina: 1