Datum correct weergeven (voor 1900 én onvolledig)
Bijvoorbeeld 1884-12-12 Moet worden 12 december 1884.
De strftime functie kan geen data voor 1900 aan. Een alternatief is de date/datecreate functie, maar deze is standaard engels.
Verder moet indien dag of maand ontbreekt, deze niet worden weergegeven. Bijvoorbeeld: 1884-12-00 wordt december 1884 en 1884-00-00 wordt 1884. Nu krijg ik 31 nov 1883 wat niet correct is.
Zelf even kijken naar quotes ed
Toevoeging op 20/06/2012 11:31:39:
Kijk ook even hier: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Had net niet helemaal goed gekeken. Zelf heb ik zoiets, maar misschien dat het anders/eenvoudiger kan:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$maand = array("","januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
$tmp_maand = mysql_fetch_array(mysql_query("SELECT MONTH(datumveld)"));
echo $maand[$tmp_maand[0]]
?>
$maand = array("","januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
$tmp_maand = mysql_fetch_array(mysql_query("SELECT MONTH(datumveld)"));
echo $maand[$tmp_maand[0]]
?>
Gewijzigd op 20/06/2012 11:32:25 door Marco ----
bedankt voor je reactie. Dit geeft echter nog steeds engelse data. Met een array is het op te lossen, maar dat moet toch ook anders kunnen?
voor de weergave van (onvolledige) data gebruik ik nu:
$sql = "SELECT DATE_FORMAT($date,'%e'), DATE_FORMAT($date,'%b'), DATE_FORMAT($date,'%Y') FROM tabel";
$result = mysql_query($sql);
if (mysql_num_rows($result)>0){
while ($rij =mysql_fetch_array($result)){
$day=$rij["DATE_FORMAT($date,'%e')"];
$month=$rij["DATE_FORMAT($date,'%b')"];
$year=$rij["DATE_FORMAT($date,'%Y')"];
if ($day>0){echo $day.' ';}
if ($month>0){echo $$month.' ';}
if ($year>0){echo $year.' ';}
}
}
Naar mijn mening ook veel te omslachtig.
SELECT DATE_FORMAT(datumveld,'%d-%m-%Y')
Dan moet je in ieder geval al dd-mm-yyyy hebben.
Maar als je toch onvolledige data hebt en je wil kijken of er lege tussen zitten moet je toch echt de dag, maand en jaar apart uitlezen uit je datum veld. Indien deze leeg zijn kun je er dan voor kiezen om deze leeg te laten.
Dus bijvoorbeeld SELECT DATE_FORMAT(datumveld,'%d') AS dag, DATE_FORMAT(datumveld, '%m') AS maand etc. Zo kan je dan controleren of een datum niet gelijk is aan nul. Zo niet dan aan elkaar koppelen.
Gewijzigd op 20/06/2012 16:10:11 door Rolf -
Als je echt onvolledige datums wilt invoeren, dan kan je volgens mij beter met aparte kolommen gaan werken voor dag, maand en jaar. Uiteraard haal je je dan heel andere problemen op de hals (moet je bijvoorbeeld zelf de datum checken of het wel een geldige datum is), maar in elk geval kan je dan 0 invoeren voor een dag of maand.
De Nachtwacht is in (weet ik veel) 1880 gemaakt. Dus niet precies op 17 juni 1880 om 20:12:42 .... dat is veel absurder.
Probeer het eens uit (ik heb dat gedaan) en raar maar waar, het lukt! Getest op 5.2.
Dit had ik al gedaan net na nijn eerste reactie, dus het komt er (tot mijn zeer grote verbazing) op neer dat op een of de andere manier mysql vanuit een string vertaalt. Bv staat er ook in de MySQL manual dat %m 0-31 kan zijn. Kan niet gekker worden ;-)
Voor het overige ben ik het met je eens dat indien je onvolledige datums kunt krijgen die gewoon op moet splitsen.
Toevoeging op 20/06/2012 18:13:23:
Eddy Erkelens op 20/06/2012 18:01:25:
De Nachtwacht is in (weet ik veel) 1880 gemaakt. Dus niet precies op 17 juni 1880 om 20:12:42 .... dat is veel absurder.
Ik wist niet dat Rembrandt (of was het van Gogh :P) zo snel was!
Gewijzigd op 20/06/2012 18:14:21 door Ger van Steenderen
Quote:
MySQL permits you to store dates where the day or month and day are zero in a DATE or DATETIME column. This is extremely useful for applications that need to store birthdates for which you may not know the exact date. In this case, you simply store the date as '2009-00-00' or '2009-01-00'. If you store dates such as these, you should not expect to get correct results for functions such as DATE_SUB() or DATE_ADD() that require complete dates. To disallow zero month or day parts in dates, enable the NO_ZERO_IN_DATE SQL mode.
Het kan dus wel. Je kan dus incomplete datums opslaan in een DATE veld. Alleen moet je er wel rekening mee houden dat sommige berekeningen niet goed zullen werken.
Daarmee vraag ik wel af wat wijsheid is. Of toch gewoon zo opslaan, of drie kolommen ervan maken?
Ik vind het gewoon belachelijk dat mysql dit accepteerd.
Marco ---- op 20/06/2012 11:26:34:
mysql_fetch_array(mysql_query("SELECT DATE_FORMAT(datum,'%d %m %Y')"))
Zelf even kijken naar quotes ed
Toevoeging op 20/06/2012 11:31:39:
Kijk ook even hier: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Had net niet helemaal goed gekeken. Zelf heb ik zoiets, maar misschien dat het anders/eenvoudiger kan:
Zelf even kijken naar quotes ed
Toevoeging op 20/06/2012 11:31:39:
Kijk ook even hier: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Had net niet helemaal goed gekeken. Zelf heb ik zoiets, maar misschien dat het anders/eenvoudiger kan:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$maand = array("","januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
$tmp_maand = mysql_fetch_array(mysql_query("SELECT MONTH(datumveld)"));
echo $maand[$tmp_maand[0]]
?>
$maand = array("","januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
$tmp_maand = mysql_fetch_array(mysql_query("SELECT MONTH(datumveld)"));
echo $maand[$tmp_maand[0]]
?>
Of:
SELECT CONCAT(DAY(datumveld), ' ', ELT(MONTH(datumveld), 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'), YEAR(datumveld)) AS datum_nl FROM tabel
Probeer maar eens "INSERT INTO sometable (datum) VALUES ('2012-06-00')"
Op 99 van de 100 databses wekrkt dat gewoon niet (zoals het hoort), de honderste is dus mysql: bullocks
@Roel, deze functie werkt niet voor onvolledige data.
@Dem Ian, de setlocale werkt niet op deze functies.
Wat ik nu heb (heel omslachting, maar het werkt)
$x=array("dag","maand","jaar" );
foreach ($x as $variabele){
$p=array("dag"=>'%e',"maand"=>'%c',"jaar"=>'%Y',);
$maand=array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
$sql = "SELECT DATE_FORMAT($date, '$p[$variabele]') AS datumdeel FROM tabel HERE '$id'=id";
$result = mysql_query($sql);
if (mysql_num_rows($result)>0){
while ($rij2 =mysql_fetch_array($result)){
$dv=$rij2["datumdeel"];
}
}
if ($dv>0){
if ($variabele=="maand"){ echo $maand[$dv-1].' ';}
else {echo $dv.' ';}
}
}
Karin php op 21/06/2012 08:58:02:
Waarom niet? soms heb je gewoon niet alle informatie. Moet je dan de rest ook maar weggooien?
Nee natuurlijk niet.
Karin php op 21/06/2012 08:58:02:
De standaarddatum is trouwens al 0000-00-00. MySQL behandeld data zoals die is. PHP gaat er onzin van maken. Dát zou niet mogen.
Iedere programmeertaal maakt er onzin van, want 0000-00-00 is geen datum dus onzin.
Het lijkt mij het verstandigste om een datum die onvolledig is niet als datum te beschouwen, en hem -zoals Erwin al suggereerde- hem in 3 kolommen op te splitsen.
$dv=substr($rij[$date],8,2);if ($dv>0){echo $dv.' ';}
$dv=substr($rij[$date],5,2);if ($dv>0){echo strftime("%B",strtotime("1-$dv-2000")).' ';}
$dv=substr($rij[$date],0,4);if ($dv>0){echo $dv;}