webForum webForum sponsras med lina och serverplats av Binero AB

Gå tillbaka   webForum > Utveckling > Webbutveckling > PHP

PHP Här diskuteras allt som har med scriptspråket PHP att göra.

Svar
 
Trådverktyg Visningsalternativ
Äldre 2012-06-05, 15:29   #1
Jester73
Medlem
 
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1
fråga Datum och PHP

Varför får jag inte ut månadens nummer enligt denna kod
PHP-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?

Senast redigerad av Jester73, 2012-06-05 klockan 15:35
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-05, 15:34 Markerad som löst av Jester73   #2
metalboy
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:
<?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
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-05, 15:37   #3
Jester73
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
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-05, 16:05   #4
drew
Medlem
 
drews avatar
 
Registrerad: 2007-03-12
Ort: Kokkola, Finland
Inlägg: 696
Lösningar: 34
timestamp sparas som int i databasen.
__________________
http://tumba25.net
drew besöker inte forumet just nu   Svara med citat
Äldre 2012-06-05, 16:53   #5
Pedda
Forumvärd
 
Registrerad: 2000-06-28
Ort: Universums mittpunkt
Inlägg: 4 786
Lösningar: 211
Citat:
drew skrev: Visa inlägg
timestamp sparas som int i databasen.
Jag brukar använda typen timestamp istället för int
__________________
Om jag var blygsam,skulle jag vara perfekt
><((((º>
Pedda besöker inte forumet just nu   Svara med citat
Äldre 2012-06-06, 21:25   #6
Jester73
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?
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-06, 21:32   #7
metalboy
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
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-06, 21:52   #8
Jester73
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?
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-07, 05:41   #9
metalboy
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
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-07, 10:57   #10
Jester73
Medlem
 
Registrerad: 2012-03-26
Inlägg: 35
Lösningar: 1
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
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-07, 11:37   #11
metalboy
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");
Detta ger mig följande rader i databasen:
Kod:
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"?
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Äldre 2012-06-07, 12:08   #12
Jester73
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?
Jester73 besöker inte forumet just nu   Svara med citat
Äldre 2012-06-07, 12:14   #13
metalboy
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:
Datum: <?php if ($row['datum'] != '0000-00-00') { echo $row['datum']; } ?>
__________________
"Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain
metalboy besöker inte forumet just nu   Svara med citat
Svar
webForum > Utveckling > Webbutveckling > PHP

Etiketter
lagra datum, mysql, php

Trådverktyg
Visningsalternativ

Forumregler
Du får inte posta nya trådar
Du får inte posta svar
Du får inte bifoga filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är av
HTML-kod är av

Forumhopp


Alla tider är i GMT +1. Klockan är nu 01:22.


Powered by: vBulletin Version 3.8.6
Copyright © webForum