webForumDet fria alternativet

Datum och PHP

PHP

12 svar · 1 422 visningar · startad av Jester73

Medlem sedan mars 2012121 inlägg
Frågan#1

Varför får jag inte ut månadens nummer enligt denna kod

$datum=2012-11-20;

echo date("m",$datum);

Resultatet blir UNIX startdatum 1970-01-01

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?

Medlem sedan jan. 2005953 inlägg
#2

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
$datum = "2012-11-20";
echo date("n", strtotime($datum)); // 11
echo date("M", strtotime($datum)); // Nov

Ändrat:
Kolla gärna i manualen :) Den är ovärderlig för PHP-programmerare ;)
http://www.php.net/date

Medlem sedan mars 2012121 inlägg
#3

Tackar för det!
Nu skall jag bara lösa hur jag sparar ett timestamp i MySQL databasen

Medlem sedan mars 2007845 inlägg
#4

timestamp sparas som int i databasen.

Medlem sedan juni 20006 031 inlägg
#5

drew skrev:

timestamp sparas som int i databasen.

Jag brukar använda typen timestamp istället för int

Medlem sedan mars 2012121 inlägg
#6

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?

Medlem sedan jan. 2005953 inlägg
#7

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.

Medlem sedan mars 2012121 inlägg
#8

Ok...om jag sätter formulärtype till Date, hjälper det eller måste jag iaf köra strtotime innan jag sparar det?

Medlem sedan jan. 2005953 inlägg
#9

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.

Medlem sedan mars 2012121 inlägg
#10

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

Medlem sedan jan. 2005953 inlägg
#11

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"? :)

Medlem sedan mars 2012121 inlägg
#12

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?

Medlem sedan jan. 2005953 inlägg
#13

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 :)

Datum: <?php if ($row['datum'] != '0000-00-00') { echo $row['datum']; } ?>
271 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)