Применить шаблон к календарю - PullRequest
0 голосов
/ 26 сентября 2011

Допустим, у меня есть шаблон букв, который просто повторяется навсегда - есть ли простой способ применить этот шаблон к календарю?

Например, сам фактический шаблон 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

Я хотел бы затем взять этот шаблон и применить его до конца года (и, если возможно, через год или два после этого), начиная с определенной даты, в моем случае, 25 февраля 2012 года.

Я думал о том, как решить эту проблему с помощью PHP без необходимости делать это вручную, но я не могу придумать, какие шаги предпринять, все, что я могу думать, это то, что он будет широко использовать date() function!

Все эти шутки в сторону, я думаю, что помещение этих значений в массив может быть хорошим первым шагом и использование этой структуры в качестве основы цикла?

Идеальным выходом будет просто:

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

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

В php очень просто использовать Julian Date n

$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";
1 голос
/ 26 сентября 2011

Вы можете использовать функцию, подобную этой:

<?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'); 
?>

Таким образом, вы просто вызываете функцию, передающую дату.

1 голос
/ 26 сентября 2011

Не уверен, почему это было удалено, это было почти правильно. Все, что я добавил, это цикл 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
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...