Jawaban singkat
$now = date_create()->format('Y-m-d H:i:s');
Baca di bawah untuk jawaban yang panjang.
Mimikri dari fungsi MySQL NOW () di PHP
Berikut adalah daftar cara dalam PHP yang meniru NOW()
fungsi MySQL .
// relative date
$now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher
$now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2
$now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!!
$now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher
$now = date('Y-m-d H:i:s'); // Slightly higher performance, but less usable for date/time manipulations
// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,
// and if you try to invoke format() on a FALSE then you'll get a:
// Fatal error: Call to a member function format() on boolean
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);
Saya pikir itu date_create()->format('Y-m-d H:i:s')
adalah cara terbaik karena pendekatan ini memungkinkan Anda untuk menangani manipulasi waktu / zona waktu lebih mudah daripada date('Y-m-d H:i:s')
dan bekerja sejak php 5.2.
Fungsi MySQL NOW ()
Fungsi MySQL NOW()
memberikan nilai datetime dalam format ini: 'YYYY-MM-DD HH:MM:SS'
. Lihat di sini: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now .
Fakta yang menarik adalah bahwa dimungkinkan untuk mendapatkan format datetime dengan menjalankan kueri ini:, SHOW VARIABLES LIKE 'd%e_format'
hasilnya bisa seperti ini:
Variable_name Value
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
Variabel di sini adalah variabel read-only. Jadi Anda tidak bisa mengubahnya.
Saya kira NOW()
fungsi MySQL mendapatkan formatnya dari datetime_format
variabel.
Kelebihan date_create () -> format () sebagai ganti date ()
Fakta yang menguntungkan dari date_create('now')->format('Y-m-d H:i:s')
lebih date('Y-m-d H:i:s')
adalah:
- lebih mudah untuk menangani manipulasi waktu
- lebih mudah untuk menangani zona waktu
- oop
Kerugian date_create () -> format () sebagai gantinya date ()
Fungsi ini date()
memiliki kinerja yang sedikit lebih baik daripada date_create()->format()
. Lihat tes benchmark di bawah ini.
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$b = date('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14
Huruf besar menunjukkan bahwa date()
lebih cepat. Namun, jika kita mengubah sedikit skenario pengujian, maka hasilnya akan berbeda. Lihat di bawah:
$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
$a = $dt->format('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$b = date('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15
Metode DateTime: format()
lebih cepat di sini daripada date()
.
Kelebihan date_create () -> format () bukannya date () dirinci
Baca terus untuk penjelasan terperinci.
lebih mudah untuk menangani manipulasi waktu
date_create()
menerima format tanggal / waktu relatif (seperti now
, yesterday
atau +1 day
) lihat tautan ini , contoh:
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
date()
menerima format tanggal / waktu relatif juga, seperti ini:
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
$tomorrow = date('Y-m-d H:i:s', (time() + 86400)); // 86400 seconds = 1 day
lebih mudah untuk menangani zona waktu
Ketika zona waktu penting maka penggunaan date_create()->format()
lebih masuk akal kemudian date()
karena date()
menggunakan zona waktu default yang dikonfigurasi dalam php.ini
di date.timezone
direktif. Tautan: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .
Dimungkinkan untuk mengubah zona waktu selama waktu berjalan. Contoh:
date_default_timezone_set('Asia/Tokyo');
.
Kelemahan dari itu adalah bahwa hal itu akan mempengaruhi semua fungsi tanggal / waktu. Masalah ini tidak ada jika Anda menggunakan date_create()->format()
dalam kombinasi dengan timezone_open()
.
PHP mendukung zona waktu utama. Yang lucu adalah bahwa ia bahkan mendukung lingkaran Arktik, dan Antartika. Pernahkah Anda mendengar tentang Longyearbyen
? Jika tidak, maka jangan khawatir, saya juga tidak sampai saya membaca dokumentasi PHP resmi.
$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');
Lihat daftar semua zona waktu yang didukung:
http://php.net/manual/en/timezones.php .
oop
OOP menggunakan Object state-full. Jadi saya lebih suka berpikir seperti ini:
// Create a DateTime Object.
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
Kemudian berpikir seperti ini:
// Give me a date time string in format 'Y-m-d H:i:s',
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
Karena itu saya akan mengatakan bahwa date_create()->format()
pendekatannya lebih mudah dibaca oleh saya date()
.
date_create () VS DateTime baru ()
Fakta yang menguntungkan dari date_create()
lebih new DateTime()
adalah:
Ruang nama
Jika Anda bekerja di namespace dan ingin menginisialisasi objek DateTime dengan kata kunci baru, maka Anda harus melakukannya seperti ini:
namespace my_namespace;
// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();
Tidak ada yang salah dengan ini, tetapi kelemahan di atas adalah bahwa orang lupa secara sporadis tentang backslash. Dengan menggunakan date_create()
fungsi konstruktor Anda tidak perlu khawatir tentang ruang nama.
$dt = date_create(); // in or not in a namespace it works in both situations
Contoh date_create () -> format ()
Saya menggunakan pendekatan ini untuk proyek saya jika saya harus mengisi array. Seperti ini:
$array = array(
'name' => 'John',
'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone
'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'),
);