Apakah ada fungsi PHP yang mengembalikan tanggal dan waktu dalam format yang sama dengan fungsi MySQL NOW()
?
Saya tahu bagaimana melakukannya dengan menggunakan date()
, tetapi saya bertanya apakah ada fungsi hanya untuk ini.
Misalnya, untuk mengembalikan:
2009-12-01 00:00:00
Jawaban:
Tidak selain fungsi tanggal :
sumber
date_default_timezone_set
fungsi iniLihat di sini untuk rincian lebih lanjut: http://pl.php.net/manual/en/function.date.php
sumber
Dengan versi PHP> = 5.4 DateTime dapat melakukan ini: -
Lihat berhasil .
sumber
Gunakan fungsi ini:
sumber
Coba ini:
sumber
Jawaban singkat
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 .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 daripadadate('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:Variabel di sini adalah variabel read-only. Jadi Anda tidak bisa mengubahnya.
Saya kira
NOW()
fungsi MySQL mendapatkan formatnya daridatetime_format
variabel.Kelebihan date_create () -> format () sebagai ganti date ()
Fakta yang menguntungkan dari
date_create('now')->format('Y-m-d H:i:s')
lebihdate('Y-m-d H:i:s')
adalah:Kerugian date_create () -> format () sebagai gantinya date ()
Fungsi ini
date()
memiliki kinerja yang sedikit lebih baik daripadadate_create()->format()
. Lihat tes benchmark di bawah ini.Huruf besar menunjukkan bahwa
date()
lebih cepat. Namun, jika kita mengubah sedikit skenario pengujian, maka hasilnya akan berbeda. Lihat di bawah:Metode DateTime:
format()
lebih cepat di sini daripadadate()
.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 (sepertinow
,yesterday
atau+1 day
) lihat tautan ini , contoh:date()
menerima format tanggal / waktu relatif juga, seperti ini:lebih mudah untuk menangani zona waktu
Ketika zona waktu penting maka penggunaan
date_create()->format()
lebih masuk akal kemudiandate()
karenadate()
menggunakan zona waktu default yang dikonfigurasi dalamphp.ini
didate.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 dengantimezone_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.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:
Kemudian berpikir seperti ini:
Karena itu saya akan mengatakan bahwa
date_create()->format()
pendekatannya lebih mudah dibaca oleh sayadate()
.date_create () VS DateTime baru ()
Fakta yang menguntungkan dari
date_create()
lebihnew DateTime()
adalah:Ruang nama
Jika Anda bekerja di namespace dan ingin menginisialisasi objek DateTime dengan kata kunci baru, maka Anda harus melakukannya seperti ini:
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.Contoh date_create () -> format ()
Saya menggunakan pendekatan ini untuk proyek saya jika saya harus mengisi array. Seperti ini:
sumber
Saya mencari jawaban yang sama, dan saya menemukan solusi ini untuk PHP 5.3 atau lebih baru:
sumber
Fungsi MySQL
NOW()
mengembalikan stempel waktu saat ini. Satu-satunya cara saya menemukan PHP menggunakan kode berikut.sumber
Satu lagi jawaban yang saya temukan mudah digunakan:
Ini adalah tanggal ISO 8601 (ditambahkan dalam PHP 5) yang digunakan MySQL
Edit
MySQL 5.7 tidak mengizinkan zona waktu di datetime secara default. Anda dapat menonaktifkan kesalahan dengan
SQL_MODE=ALLOW_INVALID_DATES
. Lihat jawabannya di sini untuk perincian lebih lanjut: https://stackoverflow.com/a/35944059/2103434 . Tetapi itu juga berarti bahwa zona waktu akan hilang ketika menyimpan ke database!Secara default MySQL menggunakan zona waktu sistem, dan selama PHP menggunakan zona waktu yang sama Anda harus baik-baik saja. Dalam kasus saya CET / UTC + 2.
Itu berarti bahwa jika saya memasukkan
2015-07-27T00:00:00+02:00
ke dalam basis data, hanya2015-07-27T00:00:00
akan disimpan (tetapi itu adalah waktu setempat yang benar!).Ketika saya memuat waktu kembali ke PHP,
secara otomatis akan menganggap itu
+02:00
zona waktu karena merupakan default. Pencetakan ini akan benar lagi:Agar aman, selalu gunakan UTC di server, tentukan di MySQL dan PHP, dan kemudian hanya konversikan ke lokal pengguna Anda saat menampilkan tanggal:
sumber
Gunakan
strftime
:%F
sama dengan%Y-%m-%d
.%T
sama dengan%H:%M:%S
.Ini demo tentang ideone.
sumber
Atau Anda dapat menggunakan
DateTime
konstanta :Berikut daftar mereka:
Untuk debugging, saya lebih suka yang lebih pendek ( 3v4l.org ):
sumber
Saya suka solusi yang diposting oleh user1786647, dan saya telah memperbaruinya sedikit untuk mengubah zona waktu ke argumen fungsi dan menambahkan dukungan opsional untuk melewati waktu Unix atau string datetime untuk digunakan untuk datestamp yang dikembalikan.
Ini juga termasuk fallback untuk "setTimestamp" untuk pengguna yang menjalankan versi lebih rendah dari PHP 5.3:
sumber
Anda dapat menggunakan fungsi tanggal PHP dengan format yang benar sebagai parameter,
sumber
Tidak ada
now()
fungsi PHP bawaan, tetapi Anda bisa melakukannya menggunakandate()
.Contoh
Anda dapat menggunakan
date_default_timezone_set()
jika Anda perlu mengubah zona waktu.Kalau tidak, Anda dapat menggunakan Carbon - Ekstensi PHP API sederhana untuk DateTime.
sumber
Jika Anda ingin mendapatkan waktu sekarang termasuk AM / PM
Ini menghasilkan
2020-05-01 05:45:28 pm
atau
Ini menghasilkan
2020-05-01 05:45:28 PM
sumber
segera
php maju sekarang kelas tambahan addMinute addYear seperti addHour dll ...
menggunakan
sumber
Setara dengan PHP adalah
time()
: http://php.net/manual/en/function.time.phpsumber
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).