tôi cần phải ra một danh sách các ngày (chỉ các ngày thứ Hai và thứ Ba) trong 12 tháng tiếp theo kể từ ngày hiện tại như sau:Bắt tất cả các ngày cho các ngày thứ Hai và thứ Ba cho năm tiếp theo
tháng 1 năm 2010
Tue 12 Tháng 1 năm 2010
Môn ngày 18 tháng một năm 2010
Tue ngày 19 tháng một năm 2010
Mon 25 tháng 1 năm 2010
tháng 2 năm 2010
Tue ngày 02 tháng 2 năm 2010
Mon 08 tháng 2 2010 0.123. Tue 09 tháng hai năm 2010
Môn ngày 15 tháng 2 năm 2010
Tue 16 tháng 2 năm 2010
Mon 22 tháng hai năm 2010
tháng 3 năm 2010
Tue 09 tháng ba 2010
Mon 15 Tháng Ba 2010
Tue 16 Tháng Ba 2010
. ..
Làm quen với PHP Tôi đã tìm thấy strtotime và lặp lại trong 52 tuần tiếp theo là cách tốt nhất để đi.
$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker
// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));
// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) ||
!in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates)) {
// check if we have to show a new month
if(strcmp($monthReference, $currentMonth) <> 0){
echo $monthReference.'<br />',"\n";
}else{
// output the dates
echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";
echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
}
$currentMonth = date("M Y", strtotime('+'.$i.' Week'));
}
}
Tuy nhiên sản lượng từ mã của tôi là
Tháng 1 2010
Mon 18 tháng 1 2010
Tue 12 Tháng 1 2010
Mon 25 Tháng 1 2010
Tue 19 Tháng 1 2010
tháng 2 năm 2010
Thứ Hai 08 tháng 2 năm 2010
Thứ Ba 02 tháng 2 năm 2010
Môn ngày 15 tháng 2 năm 2010
Tue 09 tháng hai 2010
Mon 22 Tháng Hai 2010
Tue 16 tháng 2 năm 2010
Tháng Ba 2010
Mon 08 Tháng ba 2010
Tue 02 tháng 3 năm 2010
Mon 15 Tháng Ba 2010
Tue 09 tháng ba 2010
Mon 22 Mar 2010
Thứ ba 16 Mar 2010
Thứ Hai 29 Mar 2010
Thứ Ba 23 Mar 2010
Như bạn có thể thấy ngày không theo thứ tự đúng và tôi đang thua lỗ ở nơi tôi đang sai ở đây.
Có cách nào thanh lịch/đơn giản hơn để giải quyết vấn đề này không?
Phiên bản PHP sử dụng là 5.2.11 và không có triển vọng sẽ 5.3 sớm :-(
Nhờ sự giúp đỡ của bạn.
Mã dưới đây sửa đổi theo đề nghị của Aly. Thay đổi ngày máy tính từ Thứ Ba, ngày 12/01/2010 đến thứ Tư, ngày 13/01/2010 để kiểm tra đầu ra.
$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker
// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));
// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) ||
!in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates)) {
// check if we have to show a new month
if(strcmp($monthReference, $currentMonth) <> 0){
echo $monthReference.'<br />',"\n";
}else{
// output the dates (changed the order as suggested by Aly)
echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";
}
$currentMonth = date("M Y", strtotime('+'.$i.' Week'));
}
}
Xuất lại theo thứ tự sai.
Tháng 1 2010
Tue 19 tháng 1 năm 2010
Mon 18 Tháng một 2010
Tue 26 Tháng 1 2010
Môn ngày 25 tháng 1 năm 2010
tháng 2 năm 2010
Tue 09 tháng hai 2010
Mon 08 Tháng hai 2010
Tuệ 16 Feb 2010
Mon 15 Feb 2010
Thứ Ba 23 tháng 2 năm 2010
Mon 22 Feb 2010
vui lòng xem câu trả lời đã chỉnh sửa – Aly