2013-10-09 81 views
3

對不起,如果這是重複的。爲什麼下面的代碼錯誤呢?目前,它返回12月6日,12月第一個星期五(8詢問2013年10月)爲什麼下面的代碼會在11月份的第二個星期五返回,但在12月份的第一個星期五?

$thisMonth = date('m'); 
$year = date("Y"); 
$thismonthName = date("M.", mktime(0, 0, 0, $thisMonth,0,$year)); 
if ($thisMonth < 12) { 
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,1,$year)); 
} else { 
$nextMonth = 1; 
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,1,$nextYear)); 
} 
$thisDate = date('M j', strtotime($nextmonthName . $year . "first friday")); 
print ("second friday next month is " . $thisDate); 

但修改它只是下個月是,像這樣,

$thisMonth = date('m'); 
$year = date("Y"); 
$thismonthName = date("M.", mktime(0, 0, 0, $thisMonth,0,$year)); 
if ($thisMonth < 12) { 
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,0,$year)); 
} else { 
$nextMonth = 1; 
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,0,$nextYear)); 
} 
$thisDate = date('M j', strtotime($nextmonthName . $year . "first friday")); 
print ("second friday next month is " . $thisDate); 

返回11月8日,第二11月的星期五。這是爲什麼?

+0

您在第一個星期五字符串中缺少空格,所以您實際上正在製作'Mmm 2013第一個星期五',再加上'$ nextmonth'似乎從未在任何地方定義過。 –

+0

哎呀。重新定義了$ nextmonth並修復了這個空間,但仍然沒有在11月份正確返回。這似乎是由於11月開始於星期五 – user2864757

+0

'echo date_create('nextth month of the month') - > format('Ym-d');' –

回答

3

您真的應該調查DateTime,DateInterval,DatePeriod類。他們使這種事情變得微不足道。

$date = new DateTime(); 
$interval = DateInterval::createFromDateString('second friday of next month'); 
$date->add($interval); 
echo 'Second Friday next month is ' . $date->format('Y-m-d'); 

或獲得第二個週五未來3個月:

$date = new DateTime(); 
$recurrence_count = 3; 
$interval = DateInterval::createFromDateString('second friday of next month'); 
$period = new DatePeriod($date, $interval, $recurrence_count); 
foreach ($period as $dt) { 
    echo $dt->format('Y-m-d'); 
} 
+0

'strtotime()'會工作相同,但我喜歡DateTime。 – Sven

+1

@Sven是的'strtotime()'具有相同的自然語言分析功能,但它的輸出是一個UNIX時間戳值,與DateTime,DateInterval和DatePeriod一樣靈活。它基本上爲您提供一次性值,而不是可以與任何數量的DateTime或DatePeriod對象交替使用的區間對象。 –

+0

主機網站沒有使用PHP 5.3,但我找到了一個解決方法使用上述。謝謝(你的)信息! – user2864757

1

你的代碼是太複雜了。

$secondNextFriday = new DateTime('first friday of +2 months'); // First friday in december 
相關問題