sql >> Databasteknik >  >> RDS >> Mysql

PHP mysql infoga datumformat

Som anges i Datum och tidbokstav :

MySQL känner igen DATE värden i dessa format:

  • Som en sträng i antingen 'ÅÅÅÅ-MM-DD' eller 'ÅÅ-MM-DD' formatera. En "avslappnad" syntax är tillåten:Alla skiljetecken kan användas som avgränsare mellan datumdelar. Till exempel '2012-12-31' , '2012/12/31' , '2012^12^31' och '[email protected] @31' är likvärdiga.

  • Som en sträng utan avgränsare i någon av 'ÅÅÅÅMMDD' eller 'ÅÅMMDD' format, förutsatt att strängen är vettig som ett datum. Till exempel '20070523' och '070523' tolkas som '2007-05-23' , men '071332' är olagligt (den har orimliga månads- och dagdelar) och blir '0000-00-00' .

  • Som ett nummer i antingen ÅÅÅÅMMDD eller ÅÅMMDD format, förutsatt att numret är vettigt som ett datum. Till exempel 19830905 och 830905 tolkas som '1983-09-05' .

Därför är strängen '08/25/2012' är inte en giltig MySQL-datumbokstav. Du har fyra alternativ (i någon vag prioritetsordning, utan ytterligare information om dina krav):

  1. Konfigurera Datepicker för att tillhandahålla datum i ett format som stöds med ett altField tillsammans med dess altFormat alternativ :

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    Eller om du vill att användarna ska se datumet i ÅÅÅÅ-MM-DD format, ställ bara in dateFormat alternativ istället:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Använd MySQL:s STR_TO_DATE( ) funktion för att konvertera strängen:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Konvertera strängen som tas emot från jQuery till något som PHP förstår som ett datum, till exempel en code>DatumTime objekt:

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    och sedan antingen:

    • skaffa en lämplig formaterad sträng:

      $date = $dt->format('Y-m-d');
      
    • få UNIX-tidsstämpeln:

      $timestamp = $dt->getTimestamp();
      

      som sedan skickas direkt till MySQL:s FROM_UNIXTIME() funktion:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipulera strängen manuellt till en giltig bokstavlig:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Varning

  1. Din kod är sårbar för SQL-injektion. Du verkligen bör använda förberedda uttalanden , där du skickar dina variabler som parametrar som inte utvärderas för SQL. Om du inte vet vad jag pratar om, eller hur du fixar det, läs historien om Bobby Tables .

  2. Dessutom, som anges i introduktionen till PHP-manualkapitlet om mysql_* funktioner:

    Detta tillägg är utfasat från och med PHP 5.5.0 och rekommenderas inte för att skriva ny kod eftersom det kommer att tas bort i framtiden. Istället, antingen mysqli eller PDO_MySQL förlängning ska användas. Se även MySQL API-översikt för ytterligare hjälp när du väljer ett MySQL API.

  3. Du verkar använda antingen en DATETIME eller TIMESTAMP kolumn för att hålla ett datumvärde; Jag rekommenderar att du överväger att använda MySQL:s DATE typ istället. Som förklarat i DATE , DATETIME och TIMESTAMP Typer :

    DATE typ används för värden med en datumdel men ingen tidsdel. MySQL hämtar och visar DATUM-värden i 'ÅÅÅÅ-MM-DD' formatera. Området som stöds är '1000-01-01' till '9999-12-31' .

    DATETIME typ används för värden som innehåller både datum- och tidsdelar. MySQL hämtar och visar DATETIME värden i 'ÅÅÅÅ-MM-DD TT:MM:SS' formatera. Området som stöds är '1000-01-01 00:00:00' till '9999-12-31 23:59:59' .

    TIMESTAMP datatyp används för värden som innehåller både datum- och tidsdelar. TIMESTAMP har ett intervall på '1970-01-01 00:00:01' UTC till '2038-01-19 03:14:07' UTC.



  1. Hur fyller man i kalendertabellen i Oracle?

  2. MariaDB MaxScale Load Balancing på Docker:Implementering:Del ett

  3. SQL SELECT-syntax – listad av DBMS

  4. ERD-notationer i datamodellering