Eh, saya dalam masalah, John Conde menjawab pertanyaan yang saya jawab, tetapi saya lupa menyebutkan, bahwa itu perlu bekerja pada 5.2, jadi saya benar-benar akan menggunakan jawaban Mr-sk ...
pihentagy
Jawaban:
260
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 =newDateTime('first day of this month');
echo $d->format('jS, F Y');// First day of a specific month
$d =newDateTime('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 (newDateTime('first day of this month'))->format('jS, F Y');
echo (newDateTime('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
Perhatikan bahwa Anda tidak harus melewati ->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 ...
Sejauh ini IMO adalah cara paling sederhana dan paling mudah dibaca untuk menyelesaikan masalah ini, jika yang Anda butuhkan hanyalah representasi string dari tanggal tersebut.
Markus Amalthea Magnuson
5
Hari terakhir bulan itu bisa diambil dengan menggunakan date('Y-m-t');.
Mark Tomlin
7
FYI: 't' in date ('Ym-t') selalu mewakili jumlah hari dalam bulan itu. Cara hebat dan sederhana untuk mendapatkan hari terakhir bulan ini.
Pascal Klein
1
Jika saya menggunakan ini untuk mencoba mendapatkan hari dalam seminggu date('w', '2015-05-01');maka saya berakhir dengan hari sebelumnya, bukan hari yang sebenarnya. (Ini akan memberi saya 4 bukannya 5 yang benar).
PBwebD
5
Ini sangat brilian. Saya memperluas sedikit untuk memberikan batas min dan max untuk waktu di bulan dengan melakukan: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK
32
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/>';
Ini adalah solusi yang rapi, namun 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()).
Kalle H. Väravas
22
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');
Ini keren, tapi saya mengalami beberapa masalah pada hari pertama bulan itu. Jadi, jika hari ini adalah 1 September, 11 pagi. Saya akan mendapatkan 1 Agustus! Saya harus benar-benar memeriksa apakah ini "1" hari ini dan jika demikian gunakan "sekarang". aneh (Php 7.3.9)
Jacob Christensen
@ JacobChristensen belum mengalaminya. Bagaimana Anda memperbaikinya?
Nikola Petkanski
Sangat benar, php tidak terlalu keren tentang ini. Pertama dan terakhir. $ n = new \ DateTime ('hari pertama'. (new \ DateTime ()) -> format ('F')); "hari pertama Januari". Hal yang sama terjadi pada Minggu ketika hari Senin dan sedikit ... membuat frustrasi :)
Jacob Christensen
20
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"));
keluar dari topik tetapi bagaimana Anda menghitung hari terakhir bulan itu dalam skenario yang sama.
LoneWOLFs
@LoneWOLFs last day of {$month} {$year}atau last day of this monthkeduanya 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');.
Mark Tomlin
3
Anda dapat melakukannya seperti ini:
$firstday = date_create()->modify('first day January 2010');
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 stopif($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:
(newTheFirstDayOfThisMonth(newNow()))->value();
Untuk lebih lanjut tentang pendekatan ini, lihat entri ini .
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:
Di PHP 5.4+ Anda dapat melakukan ini:
Jika Anda lebih suka cara ringkas untuk melakukan ini, dan sudah memiliki tahun dan bulan dalam nilai numerik, Anda dapat menggunakan
date()
:sumber
->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:
Hari terakhir bulan ini:
sumber
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:
sumber
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 memperbaikinyastrtotime('first day of this month 00:00:00', time())
.Saat ini saya menggunakan solusi ini:
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:
sumber
Saya menggunakan cara gila untuk melakukan ini menggunakan perintah ini
Itu saja
sumber
Di php 5.2 Anda dapat menggunakan:
sumber
Jelek, (dan tidak menggunakan pemanggilan metode Anda di atas) tetapi berfungsi:
sumber
last day of {$month} {$year}
ataulast 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 menggunakannyadate('Y-m-t');
.Anda dapat melakukannya seperti ini:
sumber
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.
sumber
menggunakan metode tanggal, kita harus bisa mendapatkan hasilnya. yaitu; tanggal ('N / D / l', mktime (0, 0, 0, bulan, hari, tahun));
Sebagai contoh
sumber
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:
Untuk lebih lanjut tentang pendekatan ini, lihat entri ini .
sumber