したがって、私のMySQLデータは次のように編成されています。
> id_nom simbol data val close min
> 3 BET 2010-02-26 5328.4502 5328.4502 5317.2400
また、選択に基づいて開始日と終了日を選択するためのフォーム。最初の選択は日付、2番目の選択は月、3番目の選択は年です。
問題は、週末と休日の日付にあります。これらの日の値は、営業日の最後に報告された値です。したがって、たとえば、BETの金曜日は5328.4502であり、日曜日の場合、DBには日曜日、土曜日、またはその他の休日の日付はありませんが、金曜日と同じ値になります。
私の解決策は次のとおりです。
日付を指定して開始日と終了日を選択する関数を作成しました。ここにあります:
function x_week_range($date) {
$ts = strtotime($date);
$start = (date('N', $ts) == 1) ? $ts : strtotime('Last Monday', $ts);
return array(date('Y-m-d', $start),
date('Y-m-d', strtotime('Next Sunday', $start)));
}
また、配列スライスを使用して、週から日付を抽出する関数。ここにあります:
function array_slice_assoc ($array, $key, $length, $preserve_keys = true)
{
$offset = array_search($key, array_keys($array));
if (is_string($length))
$length = array_search($length, array_keys($array)) - $offset;
return array_slice($array, $offset, $length, $preserve_keys);
}
そして、これらの両方を次のように使用しました:
list($start_day_week,$end_day_week)=x_week_range($data_start);
list($start_day_week2,$end_day_week2)=x_week_range($data_end);
$strSql="SELECT * FROM ind_cotatii WHERE id_nom=3 AND `data` >= '".$data_start."' AND `data` <= '".$data_end."' ";
$objDbResult = $objDatabase->Query($strSql);
while($mixRow = $objDbResult->FetchArray())
{
$datInd[$mixRow['data']]=$mixRow['val'];
}
if(isset($datInd[$data_start]))
{
$first_value=$datInd[$data_start];
}
if(isset($datInd[$data_end]))
{
$last_value=$datInd[$data_end];
}
if(!isset($first_value))
{
$arr=array_slice_assoc($datInd,$start_day_week,6,true);
$first_value=end(array_filter($arr));
var_dump('calc_we1',$arr,$start_day_week,$first_value);
}
if(!isset($last_value))
{
$arr2=array_slice_assoc($datInd,$start_day_week2,6,true);
$last_value=end(array_filter($arr2));
var_dump('calc_we2',$arr2,$start_day_week2,$last_value);
}
具体$arr
的$arr2
には、次のような配列が含まれます。
Array(6) {
["2010-12-13"]=>
string(9) "5155.9800"
["2010-12-14"]=>
string(9) "5154.6802"
["2010-12-15"]=>
string(9) "5146.3398"
["2010-12-16"]=>
string(9) "5138.5098"
["2010-12-17"]=>
string(9) "5149.9800"
["2010-12-20"]=>
string(9) "5133.9302"
}
end
したがって、基本的には、とを使用してnullではない週の最後の日を選択しますarray_filter
。
私の問題は、より具体的には次のとおりです。
開始日を選択した場合:2010年12月12日日曜日、に$arr
は13月曜日から始まる週の日付が含まれますが、最後の月曜日である6から始まる日付が必要です。
なぜこれが起こるのか、何か考えはありますか?また、私が少し複雑にしすぎたと思いますか?簡単な方法はありますか?