2009-09-28 10 views
6

Jak uzyskać niedzielę i sobotę tygodnia z określoną datą?PHP: Jak uzyskać niedzielę i sobotę, biorąc pod uwagę datę wejścia?

Na przykład:

wejściowe: Poniedziałek, 28 września 2009

wyjście powinno być:

Niedziela, 27 września 2009 00:00 - sobota, 03 październik 2009 23:59

mam na myśli używając date, strtotime, mktime i time Funkcje php.

Jeśli posiadasz użyteczną funkcję, nie ma problemu ze mną.

góry dzięki :)

Cheers, Mark

Odpowiedz

16

użyć strtotime() i 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"; 
?> 

wyjścia:

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

Dzięki za tym sir cletus. Myślę, że jest to czytelne i łatwiejsze w użyciu w mojej opinii :) – marknt15

3

przyjrzeć strtotime

tj

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; 

wyjściowa: Niedziela, 27 września 2009 00:00 - sobota, 03 października 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

Miło, DateTime jest stosunkowo nowe - nie? –

+0

@meder: domyślnie dostępny od wersji 5.2, wydany pod koniec 2006 roku. Dostępny na PECL w wersji 5.1. – Charles

1

data echa ("RMD H: i: s" ("ostatnie strtotime s unday ", time()));

data echa ("Y-m-d H: i: s", strtotime ("następna sobota", godzina()));

0

Oto, czego szukasz. To jest to, czego używam.

$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

można znaleźć data Godzina Helper bardzo przydatny w tym przypadku, może skończyć w 3 linie

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

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

Put:

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

problem z "poprawną" odpowiedzią jest: co jeśli podana data jest niedziela? Potem da ci poprzednią niedzielę zamiast aktualnej niedzieli. Ten sam problem z sobotą.

$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

Przyszedłem tutaj, szukając tego niuansu: Granice weekendu były błędne, z powodu tego, co wskazałeś (i widziałem to tylko podczas testów w weekend!). Czy jest jakiś powód, dla którego korzystasz z 12-dniowej granicy dnia zamiast o północy (12 rano)? –

+0

Wygląda na to, że skopiowałem i wkleiłem części oryginalnej odpowiedzi i wprowadziłem potrzebne zmiany. Poza tym, w tej chwili nie mogę wymyślić żadnego innego rozumowania. –

0

Get niedziela kod 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")); 
Powiązane problemy