date()
Sonucu bir MySQL datetime
türü sütununa eklemek istersem PHP'deki işleve geçmek için doğru format nedir ?
Deniyorum date("Y-M-D G:i:s")
ama bu her zaman "0000-00-00 00:00:00" ekler.
date()
Sonucu bir MySQL datetime
türü sütununa eklemek istersem PHP'deki işleve geçmek için doğru format nedir ?
Deniyorum date("Y-M-D G:i:s")
ama bu her zaman "0000-00-00 00:00:00" ekler.
Yanıtlar:
Sorun şu ki, kullandığınız 'M'
ve 'D'
metinsel bir gösterim olan MySQL, formatın sayısal bir temsilini bekliyor2010-02-06 19:30:13
Deneyin: date("Y-m-d H:i:s")
sayısal eşdeğerleri kullanır.
düzenleme: anahtarlamalı G
için H
onu bir etkiye sahip olmayabilir ama, muhtemelen öncü 0s ile 24 saat formatını kullanmak istiyorum.
Php'nin date()
manuel sayfasının yorumlarından :
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
'Y' doğruydu - bu tam bir yıl, ancak 'M' üç karakterli bir ayken, 'm' iki basamaklı bir ay. 'D' yerine 'D' ile aynı sorun. 'G', 1 veya 2 haneli bir saattir; burada 'H', gerektiğinde her zaman önde 0'dır.
Burada alternatif bir çözüm var: PHP'de tarih damgası olarak bir tarih varsa, PHP ile işlemeyi atlayın ve DB'nin FROM_UNIXTIME
işlevi kullanarak dönüştürmeyi halletmesine izin verin .
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 |
+---------------------+
MySQL DATETIME sütununa eklemek bir değişken oluşturmak için aşağıdaki PHP kodunu kullanın.
$datetime = date_create()->format('Y-m-d H:i:s');
Bu, sunucunun geçerli Tarih ve Saatini tutar.
$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`
Zaman damgasını MySQL DATETIME sütununa biçimlendir:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
Bu işlevi kullanıyorum (PHP 7)
function getDateForDatabase(string $date): string {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
PHP'nin eski sürümleri (PHP <7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
function getDateForDatabase(string $date) : string {
için function getDateForDatabase($date) {
tip bildirimleri hata durum neden söyleyecek kadar PHP bilmiyorum.
Zaman damgası kullanmıyorsanız PHP'den date () yöntemini kullanmanıza gerek yoktur. Eğer dateposted
bir datetime sütundur, böyle geçerli tarih ekleyebilirsiniz:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Bu beni basit bir cevap aramaya itiyor. Sonunda tüm girdi yakalamak ve doğru ya da en azından geçerli ve kontrol edilebilir iyi bir SQL dize vermek gibi görünüyor bu işlevi yaptı. 1999-12-31 ise, muhtemelen yanlıştır, ancak MySQL'de kötü bir hata atmaz.
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));
}
}
DateTime
PHP7 + 'da sınıf kullanma :
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('UTC'));
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set tine to midnight
return $dt->format("Y-m-d H:i:s");
}
Kabul edilen cevaba küçük bir ek: Veritabanı datetime
UTC olarak saklanırsa (her zaman yaptığım), gmdate("Y-m-d H:i:s")
yerine kullanmalısınız date("Y-m-d H:i:s")
.
Ya da, bazı cevapların önerdiği gibi, MySQL'in her şeyi işlemesine izin vermeyi tercih ederseniz UTC_TIMESTAMP
, aynı sonuçla MySQL'i eklerdim.
Not: Şu anki zamana ilişkin soruyu anladım.
Bunu yapmanın daha doğru bir yoludur. Ondalık sayıları saniyelerin arkasına yerleştirerek daha fazla hassasiyet sağlar.
$now = date('Y-m-d\TH:i:s.uP', time());
Dikkat edin .uP
.
Daha fazla bilgi: https://stackoverflow.com/a/6153162/8662476