gpt4 book ai didi

php - 在 PHP 中给定周末和无工作日,选择具有非空值的最新日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:16 25 4
gpt4 key购买 nike

所以,我的 MySQL 数据是这样组织的:

>   id_nom  simbol  data              val             close           min       
> 3 BET 2010-02-26 5328.4502 5328.4502 5317.2400

以及根据选择从中选择开始和结束日期的表单:第一次选择日期,第二次选择月份,第三次选择年份。

问题在于周末和节假日的日期,这些天的值是工作日的最后报告值。因此,例如,BET 的星期五为 5328.4502,而星期日,它将与星期五具有相同的值,尽管数据库中没有星期日或星期六或任何其他假期的日期。

我的解决方案如下:

我做了一个函数来选择给定日期的开始和结束日期。在这里:

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"
}

基本上,我使用 endarray_filter 选择不为空的一周的最后一天。

我的问题,更具体地说,如下:

如果我选择开始日期:12-12-2010 星期日,$arr 将包含从星期一 13 开始的一周的日期,而我需要从最后一个星期一开始的日期,即 6 .

知道为什么会发生这种情况,您是否认为我把它复杂化了一点?你有什么简单的方法吗?

最佳答案

我修改了我的查询如下:

SELECT * FROM ind_cotatii WHERE id_nom=3 AND `data` >= 'DATE_SUB('".$data_start."',INTERVAL 1 WEEK)' AND `data` <= '".$data_end."' ";

之所以有效,是因为它考虑了前一周,因此是该周的最后一个值,逻辑很明显。就像在原始表格中一样,如果我输入星期日,由于查询,它会选择 13,那是下周一,完全错误。

关于php - 在 PHP 中给定周末和无工作日,选择具有非空值的最新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com