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 datetime
wil 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 G
omgeschakeld 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 dateposted
is 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 datetime
wordt 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_TIMESTAMP
in te voegen, met hetzelfde resultaat.
. Opmerking: begreep de vraag verwijst naar tijd
Antwoord 12
Met behulp van datetime
klasse 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