2010-10-28 8 views
8

Tôi đang cố gắng sử dụng PHP để tạo tập lệnh tìm kiếm tất cả các ngày giữa giờ và thời gian một năm và liệt kê tất cả các ngày cho Thứ Sáu và Thứ Bảy. Tôi đã cố gắng sử dụng các hàm date() và mktime() của PHP nhưng không thể nghĩ ra một cách để làm điều này. Có thể không?Làm cách nào để sử dụng PHP để liệt kê tất cả các ngày trong một năm?

Cảm ơn, Bến

Trả lời

9

Dưới đây là làm thế nào để làm điều đó một cách mát mẻ, với lời cảm ơn đặc biệt để strtotime 's relative formats.

$friday = strtotime('Next Friday', time()); 
$saturday = strtotime('Next Saturday', time()); 
$friday = strtotime('+1 Week', $friday); 
$saturday = strtotime('+1 Week', $saturday); 

Tất nhiên bạn nên tinh chỉnh nó để thực hiện chính xác những gì bạn muốn, nhưng đó là điều tôi đang cố gắng thực hiện.

Cũng lưu ý rằng strtotime sẽ cung cấp cho bạn dấu thời gian. Để tìm hiểu việc sử dụng ngày:

date('Y-m-d', $friday) 

Một điều cần biết là Next <dayofweek> sẽ loại trừ ngày hiện tại của bạn từ tìm kiếm, vì vậy nếu bạn cũng muốn bao gồm ngày hiện tại bạn có thể làm điều đó như thế này:

$friday = strtotime('Next Friday', strtotime('-1 Day', time())); 

Và đây là tập lệnh đầy đủ làm việc chính xác những gì bạn muốn.

<?php 
// prevent multiple calls by retrieving time once // 
$now = time(); 
$aYearLater = strtotime('+1 Year', $now); 

// fill this with dates // 
$allDates = Array(); 

// init with next friday and saturday // 
$friday = strtotime('Next Friday', strtotime('-1 Day', $now)); 
$saturday = strtotime('Next Saturday', strtotime('-1 Day', $now)); 

// keep adding days untill a year has passed // 
while(1){ 
    if($friday > $aYearLater) 
     break 1; 
    $allDates[] = date('Y-m-d', $friday); 
    if($saturday > $aYearLater) 
     break 1; 
    $allDates[] = date('Y-m-d', $saturday); 

    $friday = strtotime('+1 Week', $friday); 
    $saturday = strtotime('+1 Week', $saturday); 
} 

//XXX: debug 
var_dump($allDates); 

?> 

Chúc may mắn, Alin

+0

Benchmark: ~ 0.011s –

+0

Cảm ơn bạn Alin, đó chỉ là được tôi đang tìm kiếm! Hoàn toàn rực rỡ! – Ben

1
$secondsperday=86400; 

$firstdayofyear=mktime(12,0,0,1,1,2010); 
$lastdayofyear=mktime(12,0,0,12,31,2010); 

$theday = $firstdayofyear; 

for($theday=$firstdayofyear; $theday<=$lastdayofyear; $theday+=$secondsperday) { 
    $dayinfo=getdate($theday); 
    if($dayinfo['wday']==5 or $dayinfo['wday']==6) { 
     print $dayinfo['weekday'].' '.date('Y-m-d',$theday)."<br />"; 
    } 
} 
+1

Tính toán sử dụng 86400 cho rằng tất cả các ngày có 24 giờ, mà không phải luôn luôn như vậy. Thứ Bảy tới có 25 giờ ở Tây Ban Nha do thời gian tiết kiệm ánh sáng ban ngày. –

+0

Điểm chuẩn: ~ 0,006s –

+0

Cũng lưu ý rằng quy tắc tiết kiệm ánh sáng ban ngày thay đổi rất nhiều trên toàn thế giới. Đây là lý do tại sao bạn nên sử dụng các tính năng ngôn ngữ được xây dựng trong khi thao tác thời gian. –

4

Với đối tượng DateTime:

<?php 

define('FRIDAY', 5); 
define('SATURDAY', 6); 

$from = new DateTime; 
$to = new DateTime('+1 year'); 

for($date=clone $from; $date<$to; $date->modify('+1 day')){ 
    switch($date->format('w')){ 
     case FRIDAY: 
     case SATURDAY: 
      echo $date->format('r') . PHP_EOL; 
    } 
} 

Cập nhật: Tôi đã thêm phần $date=clone $from để nhận xét rằng các đối tượng trong PHP/5 không còn sao chép với toán tử = nhưng được tham chiếu.

+0

Điểm chuẩn: ~ 0,006 –

1
$number_of_days_from_now = 365; 
    $now = time(); 

    $arr_days = array(); 

    $i = 0; 
    while($i <> $number_of_days_from_now){ 
     $str_stamp = "- $i day"; 
     $arr_days[] = date('Y-m-d',strtotime($str_stamp,$now)); 
     $i ++; 
    } 

    var_dump($arr_days); 

tôi đã làm một cái gì đó tương tự như câu trả lời chấp nhận điều đó không phù hợp với tôi