Apa yang Anda maksud dengan hari pertama dalam seminggu? Apakah yang Anda maksud Sun, Mon? Atau maksud Anda tanggal dari hari pertama dalam seminggu?
Jeffrey Hines
2
Hari pertama dalam minggu itu konstan: hari Senin (atau mungkin Minggu). Apakah Anda bermaksud untuk mendapatkan tanggal Senin sebelum tanggal sewenang-wenang tertentu?
Jon Cram
Versi PHP - 4 atau 5 apa?
Jon Cram
tanggal minggu dalam seminggu. php 5
Iggy Ma
Aneh, dia meminta DateTimesolusi dan sebagian besar jawaban tidak memberikannya. =)
$ day berisi angka dari 0 hingga 6 yang mewakili hari dalam seminggu (Minggu = 0, Senin = 1, dll.). $ week_start berisi tanggal untuk hari Minggu dari minggu ini sebagai bb-hh-tttt. $ week_end berisi tanggal untuk hari Sabtu dari minggu ini sebagai bb-hh-tttt.
this weektidak berfungsi jika Anda harus selalu memulai minggu sebelumnya, tetapi komentar @LewisBuckley melakukannya.
Smar
Argumen kedua time()adalah optionnal jika Anda ingin menentukan hari ini.
Ifnot
tidak bekerja untuk saya, saya harus melihat sintaks yang sedikit berbeda untuk YTD, MTD, WTD.
Ron
6
Jawaban ini memberikan hasil yang tidak konsisten, bergantung pada versi PHP yang digunakan: 3v4l.org/Z3k4E @ Solusi LewisBuckley konsisten untuk semua versi: 3v4l.org/Eeh9c
Deskripsi relatif seperti minggu ini memiliki konteksnya masing-masing. Berikut ini adalah output untuk minggu ini senin dan minggu ketika itu adalah hari senin atau minggu:
$date ='2015-03-16';// monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
$date ='2015-03-22';// sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
mengapa ini tidak berfungsi untuk tanggal 2016-06-05, ini memberikan tanggal minggu depan.
1
Terima kasih untuk ini, saya baru saja memodifikasi kode ini sehingga saya dapat meneruskan parameter tanggal opsional $ dt = $ custom_date? strtotime ($ custom_date): waktu (); $ monday = date ("Ymd", strtotime ('monday this week', $ dt)); $ sunday = date ("Ymd", strtotime ('sunday this week', $ dt));
Ron Michael
47
Tetap sederhana:
<?php
$dateTime =new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday'== $dateTime->format('l'))?'Monday last week':'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');?>
edit: salah ketik atau beberapa sintaks yang tidak diketahui? dari mana \ berasal? $dateTime = new \DateTime('2012-05-14');
Sliq
2
Saya melakukan ini untuk menghindari konflik dengan kemungkinan objek yang dimuat otomatis dari aplikasi Anda. Itu seperti jalur absolut atau jalur relatif.
job3dot5
9
@ Panique - "sintaks yang tidak diketahui" adalah sintaks Namespace PHP 5.3. Namespacing memungkinkan Anda untuk memberi awalan kelas dengan namespace diikuti dengan garis miring terbalik. Di sini dia menggunakannya tanpa namespace untuk menentukan DateTimekelas inti , yang berarti kode tersebut akan berfungsi bahkan jika Anda memiliki kelas lain yang dipanggil DateTimedi namespace saat ini.
Spudley
Apakah nama hari selalu dalam bahasa Inggris?
Marwelln
1
Bagian klon tidak berfungsi dengan benar. Anda harus mengkloning terlebih dahulu kemudian melakukan operasi pada klon jika Anda membutuhkan yang asli.
Farid Movsumov
25
$givenday = date("w", mktime(0,0,0, MM, dd, yyyy));
Ini memberi Anda hari dalam seminggu dari tanggal tertentu itu sendiri di mana 0= Minggu dan 6= Sabtu. Dari sana Anda cukup menghitung mundur ke hari yang Anda inginkan.
Jawaban ini mengembalikan apakah tanggal tertentu adalah hari Minggu atau Senin, dll. Tetapi, penanya telah menanyakan tanggal minggu dalam minggu dari tanggal yang ditentukan seperti yang disebutkan dalam komentarnya tentang pertanyaan asli.
Rakib
19
Pertanyaan ini membutuhkan jawaban DateTime yang bagus : -
function firstDayOfWeek($date){
$day =DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'),(int)$day->format('W'),1);return $day->format('m-d-Y');}
var_dump(firstDayOfWeek('06-13-2013'));
Keluaran:-
string'06-10-2013'(length=10)
Ini akan berurusan dengan batas tahun dan tahun kabisat.
EDIT: tautan di bawah ini tidak lagi berjalan pada versi PHP yang disebutkan. Ini berjalan pada PHP 5.6 yang meningkatkan keandalan strtotime, tetapi tidak sempurna! Hasil dalam tabel adalah hasil langsung dari PHP 5.6.
Untuk apa nilainya, berikut adalah perincian dari perilaku strtotime yang miring saat menentukan kerangka acuan yang konsisten:
Pada dasarnya, hanya string ini yang dapat diandalkan memberi Anda tanggal yang sama, tidak peduli hari apa dalam seminggu Anda saat ini saat Anda memanggilnya:
Artikel tersebut juga memberikan beberapa kode khusus untuk digunakan: $ start_of_week = strtotime ("senin depan - 1 minggu"); // Akan kembali hari Senin minggu ini mulai pukul 00:00:00 "$ end_of_week = strtotime (" senin depan - 1 detik "); // Akan kembali hari Minggu dari minggu ini yang berakhir pada pukul 23:59:59"
Scott M. Stolz
11
Kode berikut harus berfungsi dengan tanggal khusus apa pun, cukup gunakan format tanggal yang diinginkan.
Perlu dicatat bahwa ini akan selalu mengembalikan hari Senin sebelumnya, jadi jika $ custom_date adalah hari Senin, itu akan mengembalikan tanggal Senin satu minggu sebelumnya.
Hill79
2
Tidak berfungsi dengan baik, hari ini hari Minggu, hasilnya: Mulai: 09-09-2013 Selesai: 22-09-2013
pengguna2019515
10
Dengan asumsi hari Senin sebagai hari pertama dalam seminggu, ini berfungsi:
"BB-hh-tttt" tidak sama dengan "Ymd", sesuaikan jawaban Anda dengan pertanyaan spesifik.
Yevgeniy Afanasyev
1
tanggal ("MM-dd-yyyy") menghasilkan tanggal sebagai: NovNov-0202-15151515. Saya berharap seharusnya: tanggal ("Mdy") yang menghasilkan tanggal yang dapat dibaca seperti: Nov-02-15
shasi kanth
"MM-dd-yyyy" berasal dari pertanyaan. Jika Anda tidak yakin apa artinya - tanyakan dalam komentar untuk pertanyaan. Terima kasih telah mengubah jawaban Anda.
Senin terakhir pada hari Senin akan memberi Anda hari Senin sebelumnya.
Ikke
8
Inilah yang saya gunakan untuk mendapatkan hari pertama dan terakhir dalam seminggu dari tanggal berapa pun . Dalam hal ini, senin adalah hari pertama dalam seminggu ...
$date = date('Y-m-d')// you can put any date you want
$nbDay = date('N', strtotime($date));
$monday =newDateTime($date);
$sunday =newDateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
Anda harus mendapatkan hari Senin berikutnya terlebih dahulu, kemudian mendapatkan 'Senin terakhir' pada hari Senin berikutnya. Jadi jika tanggal yang diberikan adalah hari senin maka akan mengembalikan tanggal yang sama bukan minggu lalu senin.
Apa yang membuat ini lebih disukai daripada jawaban ini , atau jawaban ini ? Menurut saya ada lebih dari cukup pilihan dalam 30 jawaban lainnya ...
Mogsdad
Terima kasih. ini adalah solusi sederhana dan bekerja dengan sangat baik.
Oleg Popov
2
Cara cerdas untuk melakukan ini adalah membiarkan PHP menangani perbedaan zona waktu dan Daylight Savings Time (DST). Izinkan saya menunjukkan kepada Anda bagaimana melakukan ini.
Fungsi ini akan menghasilkan semua hari dari Senin sampai Jumat, inklusif (berguna untuk membuat hari kerja):
Ini akan mengembalikan waktu Senin-Jumat untuk minggu ini. Untuk melakukan hal yang sama pada tanggal arbitrer, teruskan tanggal sebagai parameter ke DateTimeUtilities ::getPeriodFromMondayUntilFriday, dengan demikian:
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver');//Set apprpriate timezone
$start_date = strtotime('2009-12-15');//Set start date//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0,0,0, date('m', $start_date), date('d', $start_date), date('Y', $start_date))-((date("w", $start_date)==0)?0:(86400* date("w", $start_date)));//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);?>
(Catatan: MM, dd dan yyyy di Pertanyaan bukanlah sintaks format tanggal php standar - Saya tidak yakin apa yang dimaksud, jadi saya menyetel $ start_date dengan ISO tahun-bulan-hari)
Cara termudah untuk mendapatkan hari pertama (Senin) minggu ini adalah:
strtotime("next Monday")-604800;
di mana 604800 - adalah hitungan detik dalam 1 minggu (60 * 60 * 24 * 7).
Kode ini didapat hari Senin depan dan diturunkan selama 1 minggu. Kode ini akan bekerja dengan baik setiap hari dalam seminggu. Bahkan jika hari ini adalah hari Senin.
Berguna saat kita memiliki hari Senin sebagai hari pertama dalam seminggu (Sen-Ming).
Kamran Mushtaq
0
Saya telah menjawab pertanyaan ini beberapa kali dan selalu terkejut bahwa fungsi tanggal tidak membuatnya lebih mudah atau lebih jelas. Inilah solusi saya untuk PHP5 yang menggunakan DateTimekelas:
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/function getFirstDayOfWeek(DateTime $date, $firstDay =0){
$offset =7- $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w')+ $offset)%7).'days');return $ret;}
Diperlukan untuk mengkloning agar tidak mengubah tanggal asli.
$date ="2013-03-18";
$searchRow = date("d.m.Y", strtotime('last monday',strtotime($date." + 1 day")));
echo "for date ".$date ." we get this monday: ";echo $searchRow; echo '<br>';
Ini bukan cara terbaik tetapi saya menguji dan jika saya dalam minggu ini saya mendapatkan hari Senin yang benar, dan jika saya pada hari Senin saya akan mendapatkannya hari Senin.
DateTime
solusi dan sebagian besar jawaban tidak memberikannya. =)Jawaban:
Inilah yang saya gunakan ...
$ day berisi angka dari 0 hingga 6 yang mewakili hari dalam seminggu (Minggu = 0, Senin = 1, dll.).
$ week_start berisi tanggal untuk hari Minggu dari minggu ini sebagai bb-hh-tttt.
$ week_end berisi tanggal untuk hari Sabtu dari minggu ini sebagai bb-hh-tttt.
sumber
Ganti waktu (). Metode minggu depan / senin terakhir tidak akan berfungsi jika hari ini adalah minggu / senin.
sumber
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
tidak berfungsi jika Anda harus selalu memulai minggu sebelumnya, tetapi komentar @LewisBuckley melakukannya.time()
adalah optionnal jika Anda ingin menentukan hari ini.strtotime
Fungsi yang sangat mudah digunakan :Ini sedikit berbeda di semua versi PHP :
Output untuk 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Output untuk 4.3.5 - 5.2.17
Output untuk 4.3.0 - 4.3.4
Membandingkan di Edge-Cases
Deskripsi relatif seperti minggu ini memiliki konteksnya masing-masing. Berikut ini adalah output untuk minggu ini senin dan minggu ketika itu adalah hari senin atau minggu:
Againt itu sedikit berbeda di semua versi PHP :
Output untuk 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Output untuk 4.3.5 - 5.0.5, 5.2.0 - 5.2.17
Output untuk 5.1.0 - 5.1.6
Output untuk 4.3.0 - 4.3.4
sumber
Tetap sederhana:
Sumber: manual PHP
NB: karena beberapa pengguna berkomentar, nilai $ dateTime akan diubah.
sumber
$dateTime = new \DateTime('2012-05-14');
DateTime
kelas inti , yang berarti kode tersebut akan berfungsi bahkan jika Anda memiliki kelas lain yang dipanggilDateTime
di namespace saat ini.Ini memberi Anda hari dalam seminggu dari tanggal tertentu itu sendiri di mana
0
= Minggu dan6
= Sabtu. Dari sana Anda cukup menghitung mundur ke hari yang Anda inginkan.sumber
Pertanyaan ini membutuhkan jawaban DateTime yang bagus : -
Keluaran:-
Ini akan berurusan dengan batas tahun dan tahun kabisat.
sumber
EDIT: tautan di bawah ini tidak lagi berjalan pada versi PHP yang disebutkan. Ini berjalan pada PHP 5.6 yang meningkatkan keandalan strtotime, tetapi tidak sempurna! Hasil dalam tabel adalah hasil langsung dari PHP 5.6.
Untuk apa nilainya, berikut adalah perincian dari perilaku strtotime yang miring saat menentukan kerangka acuan yang konsisten:
http://gamereplays.org/reference/strtotime.php
Pada dasarnya, hanya string ini yang dapat diandalkan memberi Anda tanggal yang sama, tidak peduli hari apa dalam seminggu Anda saat ini saat Anda memanggilnya:
sumber
Kode berikut harus berfungsi dengan tanggal khusus apa pun, cukup gunakan format tanggal yang diinginkan.
Saya menguji kode dengan PHP 5.2.17. Hasil:
sumber
Dengan asumsi hari Senin sebagai hari pertama dalam seminggu, ini berfungsi:
sumber
Bagaimana dengan ini?
sumber
Inilah yang saya gunakan untuk mendapatkan hari pertama dan terakhir dalam seminggu dari tanggal berapa pun . Dalam hal ini, senin adalah hari pertama dalam seminggu ...
sumber
Di sini saya menganggap Minggu sebagai hari pertama & Sabtu sebagai hari terakhir dalam seminggu.
Keluaran:
Mulai: 05-08-2012
Selesai: 11-08-2012
sumber
Bagaimana dengan ini?
sumber
Coba ini:
(dari utas forum ini )
sumber
Ini adalah solusi terpendek dan paling mudah dibaca yang saya temukan:
strtotime
lebih cepat darinew DateTime()->getTimestamp()
.sumber
Gunakan saja
date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
sumber
Diberikan fungsi PHP versi sebelum 5.3 berikut memberi Anda hari pertama dari minggu yang ditentukan tanggal (dalam hal ini - Minggu, 2013-02-03):
sumber
sumber
Anda harus mendapatkan hari Senin berikutnya terlebih dahulu, kemudian mendapatkan 'Senin terakhir' pada hari Senin berikutnya. Jadi jika tanggal yang diberikan adalah hari senin maka akan mengembalikan tanggal yang sama bukan minggu lalu senin.
sumber
Jika Anda ingin hari Senin sebagai awal minggu Anda, lakukan ini:
sumber
Cara cerdas untuk melakukan ini adalah membiarkan PHP menangani perbedaan zona waktu dan Daylight Savings Time (DST). Izinkan saya menunjukkan kepada Anda bagaimana melakukan ini.
Fungsi ini akan menghasilkan semua hari dari Senin sampai Jumat, inklusif (berguna untuk membuat hari kerja):
Ini akan mengembalikan waktu Senin-Jumat untuk minggu ini. Untuk melakukan hal yang sama pada tanggal arbitrer, teruskan tanggal sebagai parameter ke
DateTimeUtilities ::getPeriodFromMondayUntilFriday
, dengan demikian:Hanya tertarik pada hari Senin, seperti yang diminta OP?
sumber
Anda mengurai tanggal menggunakan
strptime()
dan menggunakandate()
hasil:sumber
(Catatan: MM, dd dan yyyy di Pertanyaan bukanlah sintaks format tanggal php standar - Saya tidak yakin apa yang dimaksud, jadi saya menyetel $ start_date dengan ISO tahun-bulan-hari)
sumber
Cara lain untuk melakukannya ....
sumber
Cara termudah untuk mendapatkan hari pertama (Senin) minggu ini adalah:
di mana 604800 - adalah hitungan detik dalam 1 minggu (60 * 60 * 24 * 7).
Kode ini didapat hari Senin depan dan diturunkan selama 1 minggu. Kode ini akan bekerja dengan baik setiap hari dalam seminggu. Bahkan jika hari ini adalah hari Senin.
sumber
Saya merasa ini cukup membuat frustrasi mengingat zona waktu saya adalah Australia dan itu
strtotime()
menyukai tanggal Inggris.Jika hari ini adalah hari Minggu, maka
strtotime("monday this week")
akan kembali pada hari berikutnya.Untuk mengatasinya:
sumber
Ini satu baris untuk hari pertama minggu lalu, dan hari terakhir minggu lalu sebagai
DateTime
objek.sumber
sumber
Saya telah menjawab pertanyaan ini beberapa kali dan selalu terkejut bahwa fungsi tanggal tidak membuatnya lebih mudah atau lebih jelas. Inilah solusi saya untuk PHP5 yang menggunakan
DateTime
kelas:Diperlukan untuk mengkloning agar tidak mengubah tanggal asli.
sumber
Bagaimana dengan:
Ini bukan cara terbaik tetapi saya menguji dan jika saya dalam minggu ini saya mendapatkan hari Senin yang benar, dan jika saya pada hari Senin saya akan mendapatkannya hari Senin.
sumber