Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP MySQL Datumsformat einfügen

Wie in Datums- und Zeitliterale angegeben :

MySQL erkennt DATE Werte in diesen Formaten:

  • Als Zeichenfolge entweder in 'YYYY-MM-DD' oder 'JJ-MM-TT' Format. Eine „entspannte“ Syntax ist zulässig:Als Trennzeichen zwischen Datumsteilen darf ein beliebiges Satzzeichen verwendet werden. Beispiel:'2012-12-31' , '2012/12/31' , '2012^12^31' , und '[email protected] @31' sind gleichwertig.

  • Als Zeichenfolge ohne Trennzeichen in beiden 'YYYYMMDD' oder 'JJMMTT' Format, sofern der String als Datum sinnvoll ist. Beispiel:'20070523' und '070523' werden als '2007-05-23' interpretiert , aber '071332' ist illegal (es hat unsinnige Monats- und Tagesteile) und wird zu '0000-00-00' .

  • Als Zahl entweder in YYYYMMDD oder JJMMTT Format, sofern die Zahl als Datum sinnvoll ist. Beispiel:19830905 und 830905 werden als '1983-09-05' interpretiert .

Daher die Zeichenfolge '08/25/2012' ist kein gültiges MySQL-Datumsliteral. Sie haben vier Möglichkeiten (in einer vagen Präferenzreihenfolge, ohne weitere Informationen zu Ihren Anforderungen):

  1. Konfigurieren Sie Datepicker so, dass Datumsangaben in einem unterstützten Format mithilfe eines altField bereitgestellt werden zusammen mit seinem altFormat Möglichkeit :

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

    Oder wenn Sie möchten, dass Benutzer das Datum im Format JJJJ-MM-TT sehen Format, legen Sie einfach das dateFormat fest Möglichkeit stattdessen:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Verwenden Sie MySQLs STR_TO_DATE( ) Funktion zum Konvertieren des Strings:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Konvertieren Sie den von jQuery erhaltenen String in etwas, das PHP als Datum versteht, wie etwa DatumUhrzeit Objekt:

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

    und dann entweder:

    • Erhalten Sie eine geeignet formatierte Zeichenfolge:

      $date = $dt->format('Y-m-d');
      
    • Rufen Sie den UNIX-Zeitstempel ab:

      $timestamp = $dt->getTimestamp();
      

      die dann direkt an MySQLs FROM_UNIXTIME() Funktion:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipulieren Sie die Zeichenfolge manuell in ein gültiges Literal:

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

Warnung

  1. Ihr Code ist anfällig für SQL-Injection. Sie wirklich sollten vorbereitete Anweisungen verwenden , an die Sie Ihre Variablen als Parameter übergeben, die für SQL nicht ausgewertet werden. Wenn Sie nicht wissen, wovon ich spreche oder wie Sie es beheben können, lesen Sie die Geschichte von Bobby Tables .

  2. Außerdem, wie in der Einführung angegeben zum Kapitel des PHP-Handbuchs zu mysql_* Funktionen:

    Diese Erweiterung ist ab PHP 5.5.0 veraltet und wird nicht zum Schreiben von neuem Code empfohlen, da sie in Zukunft entfernt wird. Stattdessen kann entweder der mysqli oder PDO_MySQL Erweiterung verwendet werden soll. Siehe auch die MySQL-API-Übersicht für weitere Hilfe bei der Auswahl einer MySQL-API.

  3. Sie scheinen entweder einen DATETIME zu verwenden oder TIMESTAMP Spalte zum Halten eines Datumswertes; Ich empfehle Ihnen, MySQLs DATE zu verwenden geben Sie stattdessen ein. Wie in dem DATE erklärt , DATETIME , und TIMESTAMP Typen :

    Das DATUM Typ wird für Werte mit einem Datumsteil, aber ohne Zeitteil verwendet. MySQL ruft DATE-Werte ab und zeigt sie in 'YYYY-MM-DD' an Format. Der unterstützte Bereich ist '1000-01-01' bis '9999-12-31' .

    Die DATETIME Typ wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitteile enthalten. MySQL ruft DATETIME ab und zeigt es an Werte in 'YYYY-MM-DD HH:MM:SS' Format. Der unterstützte Bereich ist '1000-01-01 00:00:00' bis '9999-12-31 23:59:59' .

    Der TIMESTAMP Der Datentyp wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitteile enthalten. ZEITSTEMPEL hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC.