PHP date() formaat bij invoegen in datetime in MySQL

Wat is het juiste formaat om door te geven aan de functie date()in PHP als ik het resultaat in een MySQL-kolom van het type datetimewil invoegen?

Ik heb date('Y-M-D G:i:s')geprobeerd, maar dat voegt telkens “0000-00-00 00:00:00” toe.


Antwoord 1, autoriteit 100%

Het probleem is dat u 'M'en 'D'gebruikt, die tekstuele representaties zijn, MySQL verwacht een numerieke representatie van het formaat 2010-02-06 19:30:13

Probeer: date('Y-m-d H:i:s')die de numerieke equivalenten gebruikt.

edit: heb Gomgeschakeld naar H, hoewel het misschien geen impact heeft, wil je waarschijnlijk de 24-uursnotatie gebruiken met voorloopnullen.


Antwoord 2, autoriteit 15%

Uit de opmerkingen van php’s date()handleiding:

<?php $mysqltime = date ('Y-m-d H:i:s', $phptime); ?>

Je had de ‘Y’ correct – dat is een volledig jaar, maar ‘M’ is een maand van drie tekens, terwijl ‘m’ een maand van twee cijfers is. Zelfde probleem met ‘D’ in plaats van ‘d’. ‘G’ is een uur van 1 of 2 cijfers, waarbij ‘H’ altijd een voorloop 0 heeft als dat nodig is.


Antwoord 3, autoriteit 6%

Hier is een alternatieve oplossing: als je de datum in PHP als tijdstempel hebt, omzeil hem dan met PHP en laat de DB ervoor zorgen dat deze wordt getransformeerd met behulp van de functie FROM_UNIXTIME.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)
mysql> select * from a_table;
+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+

Antwoord 4, autoriteit 4%

Ik gebruik de volgende PHP-code om een variabele te maken die ik invoeg in een MySQL DATETIME-kolom.

$datetime = date_create()->format('Y-m-d H:i:s');

Dit bevat de huidige datum en tijd van de server.


Antwoord 5, autoriteit 2%

$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ('Y-m-d H:i:s'", strtotime($date_old));
//Format should be like 'Y-m-d H:i:s'`enter code here`

Antwoord 6

Ik gebruik deze functie (PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

Oudere versies van PHP (PHP < 7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

Antwoord 7

Tijdstempel opmaken in MySQL DATETIME-kolom :

strftime('%Y-%m-%d %H:%M:%S',$timestamp);

Antwoord 8

Formaat MySQL datetime met PHP

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

Antwoord 9

Er is geen noodzaak niet de methode date () gebruik van PHP als je niet beschikt over een tijdstempel gebruiken. Als datepostedis een datetime kolom kunt u plaatst u de huidige datum als volgt uit:

$db->query("INSERT INTO table (dateposted) VALUES (now())");

Antwoord 10

Dit is me ook dol op zoek naar een eenvoudig antwoord. Tot slot heb ik deze functie die lijkt te zijn alle in- vangen en geven een goede SQL-string die juist of op zijn minst geldig en controleerbaar is. Als het 1999-12-31 het is waarschijnlijk verkeerd, maar zal niet gooien een slechte fout in MySQL.

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }
    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}

Antwoord 11

Een kleine aanvulling op geaccepteerde antwoord: Als in de database datetimewordt opgeslagen als UTC (wat ik altijd doen), moet u gebruik maken gmdate('Y-m-d H:i:s')of date("Y-m-d H:i:s")

Of, als u liever laten MySQL handvat alles, zoals sommige antwoorden stel, zou ik MySQL UTC_TIMESTAMPin te voegen, met hetzelfde resultaat.

. Opmerking: begreep de vraag verwijst naar tijd


Antwoord 12

Met behulp van datetimeklasse PHP7 +:

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string
{
 $dt = new DateTime();
 $dt->setDate($year, $month, $day);
 $dt->setTime(0, 0, 0, 0); // set time to midnight
 return $dt->format('Y-m-d H:i:s');
}

Antwoord 13

Dit is een nauwkeurigere manier om het te doen. Het plaatst decimalen achter de seconden voor meer precisie.

$now = date('Y-m-d\TH:i:s.uP', time());

Let op de .uP.

Meer info: https://stackoverflow.com/a/6153162/8662476

Other episodes