2008-08-12 19 views
6

Tôi đang cố gắng sử dụng strtotime() để trả lời nhấp chuột để tạm dừng -1 và +1 ngày (hai nút) tương ứng với ngày nâng cao so với nhấp chuột trước đó.Tiến hành qua ngày tương đối bằng cách sử dụng strtotime()

Ví dụ:

  • Đó là ngày 10 của tháng, tôi bấm nút "-1 ngày", và bây giờ ngày đọc như 9.
  • Tôi nhấp vào nút "-1 ngày" một lần nữa và bây giờ, chế độ đọc sẽ nêu ngày thứ 8.
  • Tôi nhấp vào nút "+1 ngày" và bây giờ trạng thái chỉ đọc là ngày thứ 9.

Tôi hiểu các nút và hiển thị ngày, và sử dụng $_GET và PHP để vượt qua thông tin, nhưng làm thế nào để tôi nhận được strtotime() làm việc kể từ ngày tương đối từ lần cuối cùng kịch bản thời gian đi lại được gọi là?

Công việc của tôi cho đến nay đã cho tôi thấy ngày hôm qua và hôm nay so với tại nhưng không liên quan đến, ví dụ, Ngày hôm kia, hoặc ngày mốt. Hoặc nếu tôi sử dụng số "thứ hai cuối cùng", ngày trước hoặc sau ngày hôm đó.

Trả lời

5

Làm việc từ các cuộc gọi trước để cùng một kịch bản không phải là thực sự là một ý tưởng tốt cho loại điều này.

Điều bạn muốn làm là luôn chuyển hai giá trị cho tập lệnh, ngày và phong trào. (Ví dụ dưới đây được đơn giản hóa để bạn chỉ vượt qua ngày, và nó sẽ luôn luôn thêm một ngày để nó)

Ví dụ

http://www.site.com/addOneDay.php?date=1999-12-31

<?php 
    echo Date("Y-m-d",(strtoTime($_GET[date])+86400)); 
?> 

Xin lưu ý rằng bạn nên kiểm tra để đảm bảo mà isset ($ _ GET [date]) trước là tốt

Nếu bạn thực sự muốn làm việc từ các cuộc gọi trước đó đến cùng một tập lệnh, bạn sẽ phải thực hiện nó với các phiên, vì vậy vui lòng ghi rõ nếu đúng như vậy .

+0

câu trả lời hay nhưng đừng quên báo giá $ _GET ['ngày'] – Tech4Wilco

1

Kevin, bạn làm việc trên cơ sở tuyệt đối vững chắc (ví dụ: ngày/giờ), không phải là khoảng thời gian tương đối. Sau đó, bạn chuyển đổi sang các khoảng thời gian tương đối. Vì vậy, ví dụ: theo mặc định, nếu bạn đang hiển thị lịch, bạn sẽ làm việc từ ngày đến ngày.

int strtotime (string $time [, int $now ]) 

Bạn có thể thấy trong định nghĩa hàm tại đây của strtotime, đối số thứ hai bây giờ, tức là bạn có thể thay đổi ngày mà từ đó nó tương đối.

Điều này có thể dễ dàng hiển thị qua vòng lặp nhanh

Điều này sẽ lặp lại 10 ngày qua sử dụng "ngày hôm qua" làm đối số đầu tiên. Sau đó chúng tôi sử dụng ngày để in ra.

$time = time(); 

for ($i = 0; $i < 10; $i++) { 
    $time = strtotime("yesterday", $time); 
    print date("r", $time) . "\n"; 
} 

Vì vậy, hãy chuyển thời gian/ngày qua thông qua URI để bạn có thể lưu ngày tương đối.

0

Sau một khoảnh khắc cảm hứng, giải pháp cho câu hỏi của tôi trở nên rõ ràng đối với tôi (tôi đang cưỡi xe đạp). Phần '$ now' của

strtottime(string $time {,int $now ]) 

cần phải được đặt làm ngày hiện tại. Không phải "$ time() - now", nhưng "ngày hiện tại tôi quan tâm/Tôi đang xem nhật ký của mình.

ví dụ: nếu tôi đang xem tóm tắt bảng chấm công cho 8/10/2008, sau đó là "bây giờ" theo strtotime(), hôm qua là 8/09 và ngày mai là 8/11. Khi tôi leo lên một ngày, "bây giờ" là 8/11, hôm qua là 8/10 và ngày mai là 8/12.

Dưới đây là ví dụ mã:

<?php 

//catch variable 
$givendate=$_GET['given']; 

//convert given date to unix timestamp 
$date=strtotime($givendate); 
echo "Date Set As...: ".date('m/d/Y',$date)."<br />"; 

//use given date to show day before 
$yesterday=strtotime('-1 day',$date); 
echo "Day Before: ".date('m/d/Y',$yesterday)."<br />"; 

//same for next day 
$tomorrow=strtotime('+1 day',$date); 
echo "Next Day: ".date('m/d/Y',$tomorrow)."<br />"; 
$lastmonday=strtotime('last monday, 1 week ago',$date); 
echo "Last Moday: ".date('D m/d/Y',$lastmonday)."<br />"; 

//form 
echo "<form method=\"get\" action=\"{$_SERVER['PHP_SELF']}\">"; 

//link to subtract a day 
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$yesterday)."\"><< </a>"; 

//show current day 
echo "<input type=\"text\" name=\"given\" value=\"$givendate\">"; 

//link to add a day 
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$tomorrow)."\"> >></a><br />"; 

//submit manually entered day 
echo "<input type=\"submit\" name=\"changetime\" value=\"Set Current Date\">"; 

//close form 
echo "<form><br />"; 
?> 

Nhấp vào "< <" và ">>" tiến bộ và rút lui ngày trong câu hỏi

Các vấn đề liên quan