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_formatvariabel.
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, yesterdayatau +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.inidi date.timezonedirektif. 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'),
);