Saya bisa mendapatkan hari Senin minggu ini dengan:
$monday = date_create()->modify('this Monday');
Saya ingin mendapatkan kemudahan yang sama tanggal 1 bulan ini. Bagaimana saya bisa mencapainya?
Saya bisa mendapatkan hari Senin minggu ini dengan:
$monday = date_create()->modify('this Monday');
Saya ingin mendapatkan kemudahan yang sama tanggal 1 bulan ini. Bagaimana saya bisa mencapainya?
Jawaban:
Membutuhkan PHP 5.3 untuk bekerja ("hari pertama" diperkenalkan di PHP 5.3). Kalau tidak, contoh di atas adalah satu-satunya cara untuk melakukannya:
<?php
// First day of this month
$d = new DateTime('first day of this month');
echo $d->format('jS, F Y');
// First day of a specific month
$d = new DateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');
// alternatively...
echo date_create('2010-01-19')
->modify('first day of this month')
->format('jS, F Y');
Di PHP 5.4+ Anda dapat melakukan ini:
<?php
// First day of this month
echo (new DateTime('first day of this month'))->format('jS, F Y');
echo (new DateTime('2010-01-19'))
->modify('first day of this month')
->format('jS, F Y');
Jika Anda lebih suka cara ringkas untuk melakukan ini, dan sudah memiliki tahun dan bulan dalam nilai numerik, Anda dapat menggunakan date()
:
<?php
echo date('Y-m-01'); // first day of this month
echo date("$year-$month-01"); // first day of a month chosen by you
->modify()
jika Anda hanya ingin hari pertama bulan ini . Anda dapat melewati 'first day of this month'
ke konstruktor DateTime langsung seperti: $date = new DateTime('first day of this month')
. Hanya mengatakan ...
Inilah yang saya gunakan.
Hari pertama bulan ini:
date('Y-m-01');
Hari terakhir bulan ini:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
maka saya berakhir dengan hari sebelumnya, bukan hari yang sebenarnya. (Ini akan memberi saya 4 bukannya 5 yang benar).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Ini semua yang Anda butuhkan:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
strtotime('first day of this month', time())
akan kembali pada hari pertama, dan waktunya sama dengan saat ini. Jadi begitulah, ini bukan hari pertama jam 0:00, hari pertama dan seperti sekarang. Ini memperbaikinya strtotime('first day of this month 00:00:00', time())
.
Saat ini saya menggunakan solusi ini:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
Satu-satunya masalah yang saya temukan adalah bahwa waktu aneh sedang diatur. Saya membutuhkan rentang yang benar untuk antarmuka pencarian kami dan saya berakhir dengan ini:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
Saya menggunakan cara gila untuk melakukan ini menggunakan perintah ini
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
Itu saja
Jelek, (dan tidak menggunakan pemanggilan metode Anda di atas) tetapi berfungsi:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
atau last day of this month
keduanya berfungsi. Tetapi perlu diingat bahwa $ month harus berupa string yang berisi nama bulan seperti "Januari" yang dianggap "Desemember". Atau Anda bisa menggunakannya date('Y-m-t');
.
Saya menggunakan ini dengan pekerjaan cron harian untuk memeriksa apakah saya harus mengirim email pada hari pertama setiap bulan ke afiliasi saya. Itu beberapa baris lebih dari jawaban lain tetapi padat seperti batu.
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];
//if it's not the first day then stop
if($day != "01") {
echo "error - it's not the first of the month today";
exit;
}
menggunakan metode tanggal, kita harus bisa mendapatkan hasilnya. yaitu; tanggal ('N / D / l', mktime (0, 0, 0, bulan, hari, tahun));
Sebagai contoh
echo date('N', mktime(0, 0, 0, 7, 1, 2017)); // will return 6
echo date('D', mktime(0, 0, 0, 7, 1, 2017)); // will return Sat
echo date('l', mktime(0, 0, 0, 7, 1, 2017)); // will return Saturday
Semua ekspresi php khusus itu, dalam semangat first day of ...
yang besar, meskipun mereka keluar dari kepala saya berkali-kali.
Jadi saya memutuskan untuk membangun beberapa abstraksi datetime dasar dan banyak implementasi spesifik yang secara otomatis dilengkapi oleh setiap IDE. Intinya adalah menemukan apa -baiknya. Seperti, today
, now
, the first day of a previous month
, dll Semua hal-hal saya sudah tercantum adalah datetimes. Oleh karena itu, ada antarmuka atau kelas abstrak yang disebutISO8601DateTime
, dan datetimes spesifik yang mengimplementasikannya.
Kode dalam kasus khusus Anda terlihat seperti itu:
(new TheFirstDayOfThisMonth(new Now()))->value();
Untuk lebih lanjut tentang pendekatan ini, lihat entri ini .