SEKARANG() fungsi dalam PHP

Apakah ada fungsi PHP yang mengembalikan tanggal dan waktu dalam format yang sama seperti MySQL fungsi NOW()?

Aku tahu bagaimana untuk melakukannya dengan menggunakan date(), tapi saya meminta jika ada fungsi hanya untuk ini.

Misalnya, untuk kembali:

2009-12-01 00:00:00
Mengomentari pertanyaan (1)
Larutan

Selain dari:

date("Y-m-d H:i:s");
Komentar (3)
date('Y-m-d H:i:s')

Lihat di sini untuk lebih jelasnya: http://pl.php.net/manual/en/function.date.php

Komentar (1)

Dengan versi PHP >= 5.4 DateTime dapat melakukan hal ini:-

echo (new \DateTime())->format('Y-m-d H:i:s');

Lihat itu bekerja.

Komentar (15)

Menggunakan fungsi ini:

function getDatetimeNow() {
    $tz_object = new DateTimeZone('Brazil/East');
    //date_default_timezone_set('Brazil/East');

    $datetime = new DateTime();
    $datetime->setTimezone($tz_object);
    return $datetime->format('Y\-m\-d\ h:i:s');
}
Komentar (0)

Jawaban singkat

$now = date_create()->format('Y-m-d H:i:s');

Baca di bawah untuk jawaban yang panjang.




The mimikri dari MySQL NOW() fungsi dalam PHP

Berikut adalah daftar cara dalam PHP yang meniru MySQL NOW() fungsi.

// 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'); // works as well, but it's less nice then date_create()

// 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 berpikir bahwa date_create()->format('Y-m-d H:i:s') adalah cara terbaik karena pendekatan ini memungkinkan anda untuk menangani waktu/zona waktu manipulasi lebih mudah daripada date('Y-m-d H:i:s') dan bekerja sejak php 5.2.


**MySQL NOW() fungsi**

MySQL fungsi 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 hal itu's mungkin untuk mendapatkan format datetime dengan menjalankan query ini: MENUNJUKKAN variabel-VARIABEL SEPERTI 'a%e_format', hasilnya bisa menjadi sesuatu seperti ini:

Variable_name     Value     
date_format       %Y-%m-%d
datetime_format   %Y-%m-%d %H:%i:%s

Variabel-variabel di sini adalah read-only variabel. Jadi anda bisa't perubahan itu.

Saya kira MySQL NOW() fungsi gets it's format dari datetime_format variabel.


date_create()->format() VS date()

Yang menguntungkan-fakta date_create('sekarang')->format('Y-m-d H:i:s') atas date('Y-m-d H:i:s') adalah:

  • lebih mudah untuk menangani waktu manipulasi
  • lebih mudah untuk menangani zona waktu
  • o.o.p.

lebih mudah untuk menangani waktu manipulasi

date_create() menerima relatif format tanggal/waktu (seperti sekarang, kemarin atau `+1 hari) lihat tautan ini, contoh:

$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

date() menerima relatif format tanggal/waktu 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 peduli maka penggunaan date_create()->format() membuat banyak lebih masuk akal maka date() karena date() menggunakan default zona waktu yang dikonfigurasi di php.ini di tanggal.timezone direktif. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .

Hal ini dimungkinkan untuk mengubah zona waktu saat run-time. Contoh:

date_default_timezone_set('Asia/Tokyo');.

The downside adalah bahwa hal itu akan mempengaruhi semua tanggal/waktu fungsi. Masalah ini doesn't ada jika anda menggunakan date_create()->format() dalam kombinasi dengan timezone_open().

PHP mendukung utama zona waktu. Hal yang lucu adalah bahwa hal itu bahkan mendukung lingkaran Arktik, dan Antartika. Apakah anda pernah mendengar tentang Longyearbyen? Jika tidak, maka don't khawatir, tidak aku sampai aku baca resmi dokumentasi PHP.

$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');

Lihat daftar semua didukung zona waktu: http://php.net/manual/en/timezones.php.

o.o.p.

O. O. P. menggunakan state-penuh dengan benda-Benda. Jadi saya lebih memilih untuk berpikir dengan cara 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 untuk berpikir dengan cara 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'));

Oleh karena itu saya akan mengatakan bahwa date_create()->format() pendekatan yang lebih mudah dibaca untuk saya maka date().


date_create() VS new DateTime()

Yang menguntungkan-fakta date_create() atas new DateTime() adalah:

  • Namespaces

Namespaces

Jika anda bekerja di sebuah namespace dan ingin menginisialisasi DateTime objek 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 hal ini, tapi kelemahan dari hal di atas adalah bahwa orang-orang yang lupa secara sporadis tentang backslash. Dengan menggunakan date_create() fungsi constructor anda don't 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-proyek saya jika saya harus mengisi sebuah 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'),
);
Komentar (0)

Coba ini:

date("Y-m-d H:i:s");
Komentar (8)

Saya sedang mencari jawaban yang sama, dan aku telah datang dengan solusi ini untuk PHP 5.3 atau yang lebih baru:

$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
Komentar (0)

MySQL fungsi NOW() mengembalikan timestamp saat ini. Satu-satunya cara yang saya temukan untuk PHP adalah menggunakan kode berikut.

$curr_timestamp = date('Y-m-d H:i:s');
Komentar (0)

Gunakan strftime:

strftime("%F %T");
  • %F adalah sama dengan %Y-%m-%d.

  • %T adalah sama dengan %H:%M:%S.

Berikut ini's demo pada ideone.

Komentar (0)

Satu lagi jawaban yang saya cari mudah untuk menggunakan:

echo date('c');

// 2015-07-27T00:00:00+02:00

Ini adalah ISO 8601 tanggal (ditambahkan dalam PHP 5) yang menggunakan MySQL

Edit

MySQL 5.7 tidak mengizinkan zona waktu di datetime secara default. Anda dapat menonaktifkan error dengan SQL_MODE=ALLOW_INVALID_DATES. Lihat jawabannya di sini untuk rincian lebih lanjut: https://stackoverflow.com/a/35944059/2103434. Tapi itu juga berarti bahwa zona waktu akan hilang saat menyimpan ke database!

Secara default MySQL menggunakan sistem's timezone, dan asalkan menggunakan PHP sama timezone 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 database, hanya 2015-07-27T00:00:00 akan disimpan (tapi itu adalah waktu setempat benar!).

Ketika saya load time pada PHP,

$importedDate = new \DateTime('2015-07-27T00:00:00')

ini akan secara otomatis menganggap itu's +02:00 timezone karena itu's default. Percetakan ini akan benar lagi:

echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

Untuk amannya, selalu menggunakan UTC pada server, tentukan di MySQL dan PHP, dan kemudian hanya mengubahnya untuk anda pengguna's lokal ketika menampilkan tanggal:

date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00
Komentar (0)

Atau anda dapat menggunakan DateTime konstanta:

echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00

Berikut ini's daftar mereka:

ATOM = "Y-m-d\TH:i:sP" ;               // -> 2005-08-15T15:52:01+00:00
COOKIE = "l, d-M-Y H:i:s T" ;          // -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 = "Y-m-d\TH:i:sO" ;            // -> 2005-08-15T15:52:01+0000
RFC822 = "D, d M y H:i:s O" ;          // -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 = "l, d-M-y H:i:s T" ;          // -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 = "D, d M y H:i:s O" ;         // -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 = "D, d M Y H:i:s O" ;         // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 = "D, d M Y H:i:s O" ;         // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 = "Y-m-d\TH:i:sP" ;            // -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00
RSS = "D, d M Y H:i:s O" ;             // -> Mon, 15 Aug 2005 15:52:01 +0000
W3C = "Y-m-d\TH:i:sP" ;                // -> 2005-08-15T15:52:01+00:00

Untuk debugging saya lebih suka yang lebih pendek meskipun (3v4l.org):

echo date('ymd\THisP'); // 180614T120708+02:00
Komentar (0)

Aku suka solusi diposting oleh user1786647, dan I've diperbarui sedikit untuk mengubah zona waktu untuk argumen fungsi dan menambahkan dukungan opsional untuk melewati baik Unix time atau datetime string digunakan untuk kembali datestamp.

Hal ini juga termasuk cadangan untuk "setTimestamp" untuk pengguna yang menjalankan versi yang lebih rendah dari PHP 5.3:

function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
    $objTimeZone = new DateTimeZone($strTimeZone);

    $objDateTime = new DateTime();
    $objDateTime->setTimezone($objTimeZone);

    if (!empty($strDateTime)) {
        $fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;

        if (method_exists($objDateTime, "setTimestamp")) {
            $objDateTime->setTimestamp($fltUnixTime);
        }
        else {
            $arrDate = getdate($fltUnixTime);
            $objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']);
            $objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']);
        }
    }
    return $objDateTime->format("Y-m-d H:i:s");
}
Komentar (0)

Anda dapat menggunakan PHP fungsi tanggal dengan format yang benar seperti parameter,

echo date("Y-m-d H:i:s");
Komentar (0)

Tidak ada built-in PHP now() fungsi, tetapi anda dapat melakukannya dengan menggunakan date().

Contoh

php fungsi now() { return date('Y-m-d H:i:s'); }

Anda dapat menggunakan date_default_timezone_set() jika anda perlu untuk mengubah zona waktu.

Jika tidak, anda dapat menggunakan Karbon - sederhana PHP API ekstensi untuk DateTime.

Komentar (0)
Komentar (1)

Anda dapat menggunakan simplePHP kelas untuk melakukan hal ini:

echo $date->now();

Kelas ini juga menyediakan banyak metode yang berguna untuk upload penambahan, pengurangan, dan perbandingan. Anda dapat memeriksa halaman tutorial]2 untuk lebih banyak contoh.

Komentar (0)