2011-12-19 77 views
5

因此,在PHP中,我試圖根據每週的同一天返回去年的日期值。 EX:(星期一)2011-12-19輸入應該返回(星期一)2010-12-20。php - 找到去年同一天的日期

我只是簡單地用-364來做,但那是在閏年失敗。我碰到的另一個功能:

$newDate = $_POST['date']; 
$newDate = strtotime($newDate); 
$oldDate = strtotime('-1 year',$newDate); 

$newDayOfWeek = date('w',$oldDate); 
$oldDayOfWeek = date('w',$newDate); 
$dayDiff = $oldDayOfWeek-$newDayOfWeek; 

$oldDate = strtotime("$dayDiff days",$oldDate); 

echo 'LAST YEAR DAY OF WEEK DATE = ' . date('Ymd', $oldDate); 

但是,當你試圖輸入一個星期天的日期是失敗的,因爲它爲0(星期日)-6(去年日星期六),並用價值回報T-6。 IE輸入2011-12-25讓你2010-12-19而不是2011-12-26。

我有點難以找到一個很好的解決方案,將在閏年,顯然是一週中的所有天。

有什麼建議嗎?

謝謝!

回答

8

這個怎麼樣,使用PHP的DateTime功能:

$date = new DateTime('2011-12-25'); // make a new DateTime instance with the starting date 

$day = $date->format('l');   // get the name of the day we want 

$date->sub(new DateInterval('P1Y')); // go back a year 
$date->modify('next ' . $day);  // from this point, go to the next $day 
echo $date->format('Ymd'), "\n";  // ouput the date 
+1

這是很好的,但對於閏年? – Shea 2011-12-19 23:08:06

+0

@andrewjackson工作正常。 「2012-12-25」給出了「2011-12-27」。 – lonesomeday 2011-12-19 23:08:53

2

使用的strtotime()去年獲得一個約會,在同一個星期。

使用格式{$年份} -W {$}一週 - {$平日},就像這樣:

echo date("Y-m-d", strtotime("2010-W12-1")); 

而且你能做到這一點,只要你回來wan't:

<?php 

    for($i = 2011; $i > 2000; $i--) 
    echo date("Y-m-d", strtotime($i."-W12-1")); 

?> 
4
$newDate = '2011-12-19'; 

date_default_timezone_set('UTC'); 
$newDate = strtotime($newDate); 
$oldDate = strtotime('last year', $newDate); 
$oldDate = strtotime(date('l', $newDate), $oldDate); 

$dateFormat = 'Y-m-d l w W'; 

echo "This date: ", date($dateFormat, $newDate), "\n"; 
echo "Old date : ", date($dateFormat, $oldDate); 

這給:

This date: 2011-12-19 Monday 1 51 
Old date : 2010-12-20 Monday 1 51 
2

使用戶更容易:)

echo date('Y-m-d (l, W)').<br/>; 
echo date('Y-m-d (l, W)', strtotime("-52 week")); 

編輯:我忘了寫輸出::)

2015-05-06 (Wednesday, 19) 
2014-05-07 (Wednesday, 19)