2011-09-26 58 views
0

假設我有一種字母模式,可以永久重複自己 - 有沒有簡單的方法將此模式應用於日曆?針對日曆應用模式

例如,實際的模式本身是E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O, E1, E, E, E, O, O

我想然後採取這種模式,並將其應用在今年剩餘時間(如果可能的話,一兩年是藏漢後)從開始給定的日期,在我的情況下,2月25日2012年

我一直在思考如何解決這個使用PHP,而不必訴諸手動這樣做,但我想不出要採取的步驟,所有的I可以想到的是,它會大量使用date()的功能!

除了所有的開玩笑,我認爲把這些值放入一個數組可能是一個好的第一步,並使用該結構作爲循環的基礎?

理想的輸出將僅僅是:

dd/mm/yyyy : one of E1/E/O/N1/N

+0

BTW,善意的玩笑。 –

+0

這是每天一個? – hakre

回答

1

不知道爲什麼,這已被刪除,它幾乎是正確的。我添加的所有內容都是來自上一個答案的while循環。所有功勞歸於原創海報。

<?php 
$str = "E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"; 
$now = strtotime('25th Feb 2012'); // Now in unix-timestamp (seconds since epoch) 
$end = strtotime('2013-02-25'); 
while ($now <= $end) 
{ 
    foreach (explode(', ', $str) as $val) { // Loop through each value 
     print date("d/m/Y", $now) . " : {$val}<br />\n"; // Format output 
     $now += 86400; // Add 1 day to $now (86400 seconds) 
     if ($now >= $end) break; // Close after $end date 
    } 
} 
?> 
+0

謝謝,這個答案與我所尋找的最接近。 – martincarlin87

1

在PHP它很容易使用Julian Dateň

$str = explode(', ',"E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"); 
$now = GregorianToJD(date('m'),date('j'),date('Y')); 
$start = GregorianToJD(1,13,1993); // Start January 13th 1993 
$days = $now-$start; //get total days 
$tod = $str[($days % count($str)) - 1]; //Total days mod amount of options -1 gets you the key to the currect code. 
echo "today is $tod"; 
+0

感謝,這是一個偉大的答案 – martincarlin87

1

可以使用這樣的函數:

<?php 
    function valueFor($check_date){ 
     //the data reference 
     $data = "E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"; 
     $data_ary = explode(',',str_replace(' ','',$data)); 
     $start_stamp = strtotime("2012-02-25"); 
     $check_stamp = strtotime($check_date); 
     //get difference of days for both dates 
     $days_diff = floor(($check_stamp - $start_stamp)/(60*60*24)); 
     if($days_diff > count($data_ary)) $days_diff = ($days_diff % count($data_ary)) - 1; 
     return $data_ary[$days_diff]; 
    } 

    //=> this will output 'E1' 
    echo valueFor('2012-04-01'); 
?> 

所以你只需調用傳遞日期的功能。

+0

感謝偉大的答案 – martincarlin87