Datum och PHP

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Jester73
    Medlem
    • 2012-03-26
    • 121

    #1

    Datum och PHP

    Varför får jag inte ut månadens nummer enligt denna kod
    PHP Code:
    $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?
    Last edited by Jester73; 2012-06-05, 15:35.
    Med vänlig hälsning

    Clownen
  • metalboy
    Medlem
    • 2005-01-14
    • 870

    #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 Code:
    <?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
    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

    Comment

    • Jester73
      Medlem
      • 2012-03-26
      • 121

      #3
      Tackar för det!
      Nu skall jag bara lösa hur jag sparar ett timestamp i MySQL databasen
      Med vänlig hälsning

      Clownen

      Comment

      • drew
        Medlem
        • 2007-03-12
        • 748

        #4
        timestamp sparas som int i databasen.
        http://tumba25.net

        Comment

        • Pedda
          Forumvärd
          • 2000-06-28
          • 4880

          #5
          Originally posted by drew
          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
          ><((((º>

          Comment

          • Jester73
            Medlem
            • 2012-03-26
            • 121

            #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?
            Med vänlig hälsning

            Clownen

            Comment

            • metalboy
              Medlem
              • 2005-01-14
              • 870

              #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.
              "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

              Comment

              • Jester73
                Medlem
                • 2012-03-26
                • 121

                #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?
                Med vänlig hälsning

                Clownen

                Comment

                • metalboy
                  Medlem
                  • 2005-01-14
                  • 870

                  #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.
                  "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

                  Comment

                  • Jester73
                    Medlem
                    • 2012-03-26
                    • 121

                    #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
                    Med vänlig hälsning

                    Clownen

                    Comment

                    • metalboy
                      Medlem
                      • 2005-01-14
                      • 870

                      #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:
                      Code:
                      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:
                      Code:
                      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

                      Comment

                      • Jester73
                        Medlem
                        • 2012-03-26
                        • 121

                        #12
                        Datumen skall presenteras i en gridd och det ser snyggare med ett tomt fält än 000r
                        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?
                        Med vänlig hälsning

                        Clownen

                        Comment

                        • metalboy
                          Medlem
                          • 2005-01-14
                          • 870

                          #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

                          PHP Code:
                          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

                          Comment

                          Working...