![]() |
|
|
|||||||
| PHP Här diskuteras allt som har med scriptspråket PHP att göra. |
![]() |
|
|
Trådverktyg | Visningsalternativ |
|
|
#1 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
Varför får jag inte ut månadens nummer enligt denna kod
PHP-kod:
Variablen datum är hämtat från en MySQL databas och inte inskrivet som ovan men det är lagrat i det formatet i databasen. Vad är ett bra sätt att lagra datum på i MySQL? Senast redigerad av Jester73, 2012-06-05 klockan 15:35 |
|
|
|
|
|
Markerad som löst av Jester73 #2 |
|
Medlem
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101 |
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") prova med följande: PHP-kod:
Ändrat: Kolla gärna i manualen Den är ovärderlig för PHP-programmerare![]() http://www.php.net/date
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain |
|
|
|
|
|
#3 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
Tackar för det!
Nu skall jag bara lösa hur jag sparar ett timestamp i MySQL databasen |
|
|
|
|
|
#4 |
|
Medlem
Registrerad: 2007-03-12
Ort: Kokkola, Finland
Inlägg: 696
Lösningar: 34 |
timestamp sparas som int i databasen.
__________________
http://tumba25.net |
|
|
|
|
|
#5 |
|
Forumvärd
Registrerad: 2000-06-28
Ort: Universums mittpunkt
Inlägg: 4 786
Lösningar: 211 |
Jag brukar använda typen timestamp istället för int
__________________
Om jag var blygsam,skulle jag vara perfekt ><((((º> |
|
|
|
|
|
#6 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
MySQL verkar inte acceptera timestamp om den inte får ett attribut så som current time eller on update.
Men Date sparar väl i datumformat? Om jag läser in datumet från ett html formulär sparas det i MySQL som text? |
|
|
|
|
|
#7 |
|
Medlem
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101 |
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.
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain |
|
|
|
|
|
#8 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
Ok...om jag sätter formulärtype till Date, hjälper det eller måste jag iaf köra strtotime innan jag sparar det?
|
|
|
|
|
|
#9 |
|
Medlem
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101 |
strtotime kör du när du hämtar värdet från databasen om du ska använda dig av PHPs date-funktion för att formatera datumet.
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain |
|
|
|
|
|
#10 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
Jag som är otydlig
Databaser och Datum strular alltidOm 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
|
|
|
|
|
|
#11 |
|
Medlem
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101 |
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: Kod:
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");
Kod:
id text datum ========================================== 1 Text med datum 2012-06-07 2 Text med NULL-datum NULL 3 Text utan datum NULL 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"?
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain |
|
|
|
|
|
#12 |
|
Medlem
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1 |
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? |
|
|
|
|
|
#13 |
|
Medlem
Registrerad: 2005-01-14
Ort: Upplands Väsby
Inlägg: 711
Lösningar: 101 |
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 ![]() PHP-kod:
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain |
|
|
|
![]() |
| Etiketter |
| lagra datum, mysql, php |
| Trådverktyg | |
| Visningsalternativ | |
|
|