datum omdraaien tbv opslaan in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eric

Eric

03/10/2006 17:08:00
Quote Anchor link
Wie kan me een beetje op weg helpen?
Ik haal een datum uit een tekstveld die volgens hollandse notatie is ingevuld: dd-mm-yyyy
Nu wil ik deze opslaan in de database, maar die slaat alleen in het formaat yyyy-mm-dd op....

Hoe maak ik nou die conversie?
(Voorwaarde van die hollandse notatie in het tekstveld is vereist...)
 
PHP hulp

PHP hulp

22/12/2024 19:21:07
 
Michael -

Michael -

03/10/2006 17:16:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$datum
= "03-10-2006";
$newdatum = explode("-", $datum);
$newdatum = $newdatum[2]."-".$newdatum[1]."-".$newdatum[0];
echo "Oude datum: ".$datum;
echo "<br>Nieuw datum: ".$newdatum;
?>

niet getest

edit: Echo toegevoegt en hij doet t.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
 
Frank -

Frank -

03/10/2006 17:18:00
Quote Anchor link
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
<?php

$sDatum
= '3-10-2006';

$aDatum = explode('-', $sDatum);

if (checkdate($aDatum[1], $aDatum[0], $aDatum[2])) {
    $sDatum = $aDatum[2].'-'.$aDatum[1].'-'.$aDatum[0];
    
    // uitvoeren query, etc.
    echo $sDatum;
}

else {
    echo 'Datum is niet correct.';
}

?>

Met controle op een bestaande datum...
 
Eric

Eric

03/10/2006 17:26:00
Quote Anchor link
ok, heel erg dankiewel! Ik ga het straks even invoegen....
Het werkt! Thanks...
Gewijzigd op 01/01/1970 01:00:00 door Eric
 
Jurgen assaasas

Jurgen assaasas

04/10/2006 10:09:00
Quote Anchor link
Ik denk dat mijn mogelijkheid makkelijker is nl.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

date("d-m-Y H:i:s", strtotime($mysqloutput['dbfield']))

?>
 
Frank -

Frank -

04/10/2006 14:28:00
Quote Anchor link
Jurgen:
Ik denk dat mijn mogelijkheid makkelijker is nl.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

date("d-m-Y H:i:s", strtotime($mysqloutput['dbfield']))

?>
Ik denk dat je de plank volledig misslaat! In de eerste plaats is het de bedoeling om een opmaak dd-mm-yyyy om te zetten naar yyyy-mm-dd en in de tweede plaats kun je de database de datum laten opmaken wanneer je deze uit de database haalt. Ten derde zul je functie date() nooit en te nimmer nodig hebben om een datum op te maken die uit de database komt. Een datum sla je namelijk op als een DATE of DATETIME en de functie date() vereist een (waardeloze) unixtimestamp. Dat gaat dus niet lukken. Gebruik de MySQL-functie DATE_FORMAT() of ga met een fraaie CASE aan de slag. Er zijn vele mogelijkheden en ze zijn allemaal beter dan een oplossing met de php-functie date().
 
PHP erik

PHP erik

04/10/2006 14:33:00
Quote Anchor link
Uiteraard ben ik het eens met het verhaal van Frank, maar wat ik niet begrijp is dat mensen hier nu ingewikkelde scripts posten met explode() en nog meer vieze dingen terwijl een regexje gewoon veel duidelijker en handiger is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$datum
= preg_replace('/([0-9]{1,2})\-([0-9]{1,2})\-([0-9]{4})/', '\\3-\\2-\\1', $datum);
?>


/edit
Dat 'ingewikkeld' waar ik het over heb moet je wel relativeren, voordat ik dat weer naar m'n hoofd krijg ;)
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Frank -

Frank -

04/10/2006 14:43:00
Quote Anchor link
@PHPerik: Een regexje is leuk en aardig, maar nu moet je de boel alsnog opknippen in stukken om de functie checkdate() te kunnen gebruiken. Jouw code heeft namelijk geen enkele moeite met 29-02-2007 ondanks dat deze datum niet bestaat. MySQL maakt daar 'keurig' 1 maart van, met als gevolg dat je data corrupt is.

In combinatie met de checkdate() lijkt mij een explode() handiger. Of het sneller is, geen idee, nooit getest.
 
Kalle P

Kalle P

04/10/2006 14:49:00
Quote Anchor link
Ik vind een dropdown handiger en mooier. Anderzijds een dynamic om bij april 30 dagen te krijgen ipv 31, bijvoorbeeld.
 
PHP erik

PHP erik

04/10/2006 15:04:00
Quote Anchor link
Wat ik uit de originele post afleid is dat hij de data al heeft, dan hoef je niets te controleren.

Of bedoelt hij met "tekstveld" een input in HTML? Dan moet TS Kalles post hierboven even lezen.
 
Frank -

Frank -

04/10/2006 15:10:00
Quote Anchor link
@Kalle: Wanneer je maximaal 1x in de week een datum moet invoeren, ben ik het met je eens. Wanneer je echter tientallen keren per dag datums moet invoeren, word je gillend gek wanneer je dat met dropdownlistjes moet doen. Een paar getalletjes en 2 streepjes inkloppen gaat minstens 100x sneller dan een datum selecteren met een dropdownlist.

En ik roep het nogmaals, je blijft de functie checkdate() nodig hebben om te checken of de datum wel correct is. Waardes in een dropdownlist zijn door de gebruiker namelijk eenvoudig aan te passen en dus nooit te vertrouwen.
 
Toine vd P

Toine vd P

04/10/2006 15:42:00
Quote Anchor link
Ik zou persoonlijk alleen de timestamp zelf in de database zetten als integer(11).
In diat geval kun je hem uit en in lezen onder elk gewenst formaat

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
echo date("g:i a",$record['tijd']);
echo date("G:h",$record['tijd']);
?>


enzovoort,
 
Frank -

Frank -

04/10/2006 15:54:00
Quote Anchor link
Twan:
Ik zou persoonlijk alleen de timestamp zelf in de database zetten als integer(11).
In diat geval kun je hem uit en in lezen onder elk gewenst formaat

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
echo date("g:i a",$record['tijd']);
echo date("G:h",$record['tijd']);
?>


enzovoort,
De volgende functies kun je dan niet/nauwelijks meer gebruiken: http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html

Een timestamp is zo'n beetje het meest rottige formaat die er te krijgen is. Er is geen hond geinteresseerd in het aantal seconden dat sinds 1-1-1970 is verstreken.

En waarom zou je dit gebruiken wanneer je DATE en DATETIME tot je beschikking hebt? Dat zijn ISO-formaten, internationale standaarden! Daar hebben een paar slimmeriken toch echt wel over nagedacht...

Het gebruik van een timestamp betekent ook dat je de datum- en tijdfuncties van de database zelf opnieuw kunt gaan schrijven en testen. Verder gaat dit performance-problemen opleveren omdat deze zelfgeschreven functies vele, vele malen langzamer zijn dan de kant-en-klare databasefuncties.

Kortom, vergeet die timestamp en gebruik DATE of DATETIME.
 



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.