2011-12-19 34 views
5

Vì vậy, trong PHP tôi đang cố gắng trả lại giá trị ngày cho năm ngoái dựa vào cùng một ngày trong tuần. EX: (Thứ Hai) 2011-12-19 đã nhập sẽ trở lại (Thứ Hai) 2010-12-20.php - tìm ngày trong cùng một ngày trong tuần cho năm ngoái

Tôi chỉ làm điều đó đơn giản bằng -364 nhưng sau đó điều đó đã thất bại trong những năm nhuận. Tôi đã xem qua chức năng khác:

$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); 
tuy nhiên

, đó là thất bại khi bạn cố gắng đầu vào một ngày chủ nhật, khi nó hoạt động 0 (Chủ Nhật) trừ đi 6 (thứ bảy ngày năm ngoái), và trở lại với một giá trị T-6. IE nhập 2011/12-25 được bạn 2010-12-19 thay vì 2011-12-26.

Tôi là loại stumped để tìm một giải pháp tốt trong php sẽ làm việc cho năm nhuận và rõ ràng là tất cả các ngày trong tuần.

Mọi đề xuất?

Cảm ơn!

Trả lời

8

Làm thế nào về vấn đề này, sử dụng DateTime chức năng của PHP:

$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

đó là tốt, nhưng những gì về năm nhuận? – Shea

+0

@andrewjackson Hoạt động tốt. '2012-12-25' cho' 2011-12-27'. – lonesomeday

2

Sử dụng strtotime() để có được một ngày, trong tuần cùng kỳ năm ngoái.

Sử dụng định dạng {$ năm} -W {$ tuần} - {$ tuần}, như thế này:

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

Và bạn có thể làm điều đó càng lâu lại bạn 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); 

Điều đó mang lại:

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

làm cho nó dễ dàng hơn :)

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

Edit: Tôi quên để viết ra: :)

2015-05-06 (Wednesday, 19) 
2014-05-07 (Wednesday, 19) 
Các vấn đề liên quan