1. Andra argumentet till date-funktionen ska vara ett Unix timestamp. Inte ett formaterat datum.
2. date("M") returnerar en textrepresentation av månaden ("Jan" - "Dec")
Jag brukar använda DATE för datum, och DATETIME om det är datum och tid som ska sparas.
Använd sedan strtotime() i PHP för att få värdet till UNIX timestamp. Du kan även använda DATE_FORMAT() för att formatera värdet enligt dina önskemål direkt i SQL-frågan när du hämtar data.
Jag som är otydlig :) Databaser och Datum strular alltid
Om jag via ett formulär sparar datumet 2012-05-03 (inskrivet precis så) så verkar ju MySQL spara det i ett vanligt textformat även att det är ett DATE fält. Inte UNIX timestamp format i alla fall?
För när jag hämtar det utan att formatera det i MySQL eller PHP så kommer det ut som ovan.
Sen lägger MySQL in 0000-00-00 i ett Date fält som inte får ett datum, vet inte hur jag får den att sluta....har sagt att den skall vara NULL per default :( Går jag in och redigerar posten direkt i databasen så kan jag få bort nollorna
Exakt hur MySQL sparar data när man använder DATE-typen låter jag vara osagt, jag vet helt enkelt inte, och bryr mig faktiskt inte heller. Så länge det fungerar ;) Men det presenteras i alla fall för användaren på ett mänskligt läsbart sätt (2012-05-03). Ett UNIX timestamp är ju lite svårare för en vanlig dödlig att se vilken tidpunkt det är som anges (1339064684 t.ex.). MySQL hanterar dock inte DATE-fält som textfält. Textfält (VARCHAR, CHAR, TEXT, etc) kan du nämligen inte använda MySQLs datumfunktioner på, vilket du kan på DATE-fält.
Har du satt att NULL-värden är tillåtna på det aktuella fältet? Och att NULL ska vara standardvärde? Det fungerar i alla fall när jag testar, med NULL som datumvärde både implicit och explicit.
Beakta följande:
CREATE TABLE `testar` (
`id` UNSIGNED INT NOT NULL AUTO_INCREMENT,
`text` TEXT NOT NULL,
`datum` DATE DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `testar` (`text`,`datum`) VALUES ("Text med datum", NOW()), ("Text med NULL-datum", NULL);
INSERT INTO `testar` (`text`) VALUES ("Text utan datum");
Detta ger mig följande rader i databasen:
id text datum
==========================================
1 Text med datum 2012-06-07
2 Text med NULL-datum NULL
3 Text utan datum NULL
Hur ser din tabellstruktur ut? Använder du något verktyg för att göra ändringar i databasen, t.ex. phpMyAdmin eller MySQL Query Browser?
Tillägg:
Finns det någon anledning till att du inte gillar att det står 0000-00-00 i fältet om du inte anger något datum? Eller är det bara att det "ser fult ut"? :)
Datumen skall presenteras i en gridd och det ser snyggare med ett tomt fält än 000:or :)
Och jag instämmer med dig, skiter i vilket format det sparas i bara jag kan använda det som datum och att inga nollor kommer upp på hemsidan :)
Jag använder ett verktyg, phpMyAdmin då databasen ligger på mitt webhotell.
Och jag har kryssat NULL eftersom jag inte kan sätta standardvärdet till NULL med DATE
Kan det vara så att datat från formuläret inte är tomt?
Det är skillnad på ett tomt värde och ett NULL värde. Ska du skicka in ett NULL-värde måste du skriva NULL. Det är enda sättet (om du inte har standardvärde på kolumnen som NULL och utelämnar kolumnen när du kör INSERT). På DATE-fält går det alldeles utmärkt att sätta default till NULL, på vilket sätt fungerar det inte för dig?
Jag tror att det enklaste här är att bara strunta i hur det ser ut i databasen och fixa så att datumvärdet "0000-00-00" inte skrivs ut när du hämtar det med PHP. Det krävs ju bara en enkel if-sats :)