2009-09-28 22 views
6

Làm cách nào để có được ngày Chủ Nhật và thứ Bảy trong tuần cho một ngày cụ thể?PHP: Làm thế nào để nhận được chủ nhật và thứ bảy cho một đầu vào ngày?

Ví dụ:

đầu vào: Thứ 2 28 Tháng Chín, 2009

sản lượng nên là:

chủ nhật 27 Tháng Chín, 2009 00:00 - Thứ Bảy 3 tháng 10, 2009 23:59

tôi đang nghĩ đến việc sử dụng date, strtotime, mktimetime chức năng php.

Nếu bạn có một chức năng có thể sử dụng thì nó cũng tốt với tôi.

Cảm ơn trước :)

Chúc mừng, Đánh dấu

Trả lời

16

Bạn sử dụng strtotime()date():

<?php 
$s = 'Monday, September 28, 2009'; 
$time = strtotime($s); 
$start = strtotime('last sunday, 12pm', $time); 
$end = strtotime('next saturday, 11:59am', $time); 
$format = 'l, F j, Y g:i A'; 
$start_day = date($format, $start); 
$end_day = date($format, $end); 
header('Content-Type: text/plain'); 
echo "Input: $s\nOutput: $start_day - $end_day"; 
?> 

kết quả đầu ra:

Input: Monday, September 28, 2009 
Output: Sunday, September 27, 2009 12:00 PM - Saturday, October 3, 2009 11:59 AM 
+0

Cám ơn cletus thưa ông này. Tôi nghĩ rằng điều này dễ đọc và dễ sử dụng hơn trong quan điểm của tôi :) – marknt15

3

hãy nhìn vào strtotime

ví dụ:

strtotime('next sunday', strtotime($your_date_string)); 
0

strtotime

$input = strtotime("Monday, September 28, 2009"); 
$nextSunday = strtotime("next Sunday",$input); 
0
<?php 

$date = strtotime('Monday, September 28, 2009 - 1 day'); 
$initialString = date('l, F d, Y g:i A', $date); 
$end = date('l, F d, Y g:i A', strtotime('next saturday 11:59 pm', $date)); 

echo $initialString . ' - ' . $end; 

đầu ra: Chủ Nhật 27 tháng 9, 2009 00:00 - Thứ bảy 3 Tháng 10, 2009 23:59

9
<?php 

date_default_timezone_set('Europe/London'); 

$datetime = new DateTime("2009-09-23 12:00:00"); 

// Saturday 
$datetime->setISODate(2009, $datetime->format("W"), 6); 
print "Saturday:" . $datetime->format(DATE_ATOM) . "\n"; 
// Sunday 
$datetime->setISODate(2009, $datetime->format("W"), 0); 
print "Sunday: " . $datetime->format(DATE_ATOM) . "\n"; 


?> 
+0

Rất đẹp, DateTime tương đối mới - không? –

+0

@meder: Có sẵn theo mặc định là 5.2, được phát hành vào cuối năm 2006. Nó có sẵn trên PECL cho 5.1. – Charles

1

ngày echo ("Ymd H: i: s", strtotime ("s unday ", time()));

ngày lặp lại ("Y-m-d H: i: s", strtotime ("thứ bảy tiếp theo", thời gian()));

0

Đây là những gì bạn đang tìm kiếm. Đó là những gì tôi sử dụng.

$beginningOfWeek = date('Y-m-d H:i:s', strtotime('last Sunday')); 
$endOfWeek = date('Y-m-d H:i:s', strtotime('+6 day', strtotime('last Sunday'))); 
0

Bạn có thể tìm thấy ngày của tôi Thời gian Helper nhiều tiện dụng trong trường hợp này, nó có thể hoàn thành trong 3 dòng

http://normandqq.github.io/Date-Time-Helper/

$date = '2013-08-11'; 
    $monday = Model_DTHpr::getMondayByDate($date); 
    $sunday = Model_DTHpr::adjustDays("add",$monday,6); 

Out Đặt:

2013-08-05 //Monday 
    2013-08-11 //Sunday 
1

vấn đề với câu trả lời 'đúng' là, nếu ngày được cung cấp là ngày chủ nhật thì sao? Sau đó, nó sẽ cung cấp cho bạn chủ nhật trước, thay vì chủ nhật hiện tại. Cùng một vấn đề với thứ bảy.

$s = 'Monday, September 28, 2009'; 
$time = strtotime($s); 
if(date('D', $time) == "Sun"){ 
    $start = strtotime(' 12pm', $time); 
} 
else { 
    $start = strtotime('last sunday, 12pm', $time); 
} 
if(date('D', $time) == "Sat"){ 
    $start = strtotime(' 12pm', $time); 
} 
else { 
    $start = strtotime('next saturday, 12pm', $time); 
} 
$format = 'l, F j, Y g:i A'; 
$start_day = date($format, $start); 
$end_day = date($format, $end); 
header('Content-Type: text/plain'); 
echo "Input: $s\nOutput: $start_day - $end_day"; 
+0

Tôi đến đây tìm kiếm sắc thái này: Ranh giới cuối tuần của tôi đã sai, bởi vì những gì bạn đã chỉ ra (và chỉ thấy điều này trong khi thử nghiệm vào cuối tuần!). Có lý do nào bạn sử dụng ranh giới ngày 12 giờ thay vì nửa đêm (12 giờ sáng) không? –

+0

Có vẻ như tôi đã sao chép và dán các phần của câu trả lời gốc và thực hiện các thay đổi cần thiết. Ngoài ra, tại thời điểm này, tôi không thể nghĩ ra bất kỳ lý do nào khác. –

0

Nhận Chủ Nhật Mã Php:

echo "Today Is : " . date("d-m-Y"); 
$dw = date("w"); 
$dw = 7-$dw; 
echo "\nNext Sunday Is" .date('d-m-Y', strtotime("+$dw days")); 
Các vấn đề liên quan