$month=date("m");
$year=date("Y");
if ($month==1) {$start_month=12; $start_year=$year-1;}
else { $start_month=$month-1; $start_year=$year;}
$k=cal_days_in_month(CAL_GREGORIAN, $month, $year);
$date1 = "$start_year-$start_month-01";
$date2 = "$year-$month-$k";
$res = mysql_query("SELECT $select FROM `$tab[$cycle]` WHERE `samedate`>='".$date1."' AND `samedate`<='".$date2."' ORDER BY `samedate` ASC");
После чего я обрабатываю даные, проблема в том что в некоторых месяцах пропадает один день, и даные сдвигаются на один день назад, вместо даных 9-го числа показывает даные 8-го числа, как правило в 4-от месяце, иногда в 3-ем, а в остальных норм. Мож я не правильно задал граници времени иль чет с синтаксисом не так??? 6 часов на эту потратил, нужен свежий взгляд со стороны, помогите плиззз...
весь скрипт:
Свернутый текст
if (empty($rahuvaty_yak))
{
if ($month==1) {$start_month=12; $start_year=$year-1;}
else { $start_month=$month-1; $start_year=$year;}
$k=cal_days_in_month(CAL_GREGORIAN, $month, $year);
$k2=cal_days_in_month(CAL_GREGORIAN, $start_month, $start_year);
$date1 = "$start_year-$start_month-01";
$date2 = "$year-$month-$k";
}
else
{ $start_year=$y-1;
$date1 = "$start_year-12-01";
$date2 = "$y-12-31";
$k=date("z", mktime(0,0,0,12,31,$y)) + 1;
}
$res = mysql_query("SELECT $select FROM `$tab[$cycle]` WHERE `samedate`>='".$date1."' AND `samedate`<='".$date2."' ORDER BY `samedate` ASC");
$arr_iz_tablic = array();
while(@$row = mysql_fetch_row($res)) {
array_push($arr_iz_tablic, $row[0]);
}
@mysql_data_seek($res, 0);
$mas = array();
$start = strtotime($date1);
while ($start <= strtotime($date2)) {
array_push($mas,date("Y-m-d",$start));
$start = $start + (3600*24);
}
unset ($num1);
foreach ($mas as $i=>$v) {
if (in_array($v,$arr_iz_tablic)) {
$row = mysql_fetch_row($res);
$num1[$i]=$row[1];
$num2[$i]=$row[2];
$num3[$i]=$row[3];
if ($main_cycle!=3) {$num4[$i]=$row[4];} else {$num4[$i]=0;}
if ($main_cycle!=3) {$num5[$i]=$row[5];} else {$num5[$i]=0;}
if ($main_cycle==1)
{
$num6[$i] =$row[6];
$num7[$i] =$row[7];
$num8[$i] =$row[8];
$num9[$i] =$row[9];
$num10[$i]=$row[10];
}
else
{
$num6[$i] =1;
$num7[$i] =1;
$num8[$i] =1;
$num9[$i] =1;
$num10[$i]=1;
}
}
else
{
$num1[$i]=0;
$num2[$i]=0;
$num3[$i]=0;
if ($main_cycle!=3) {$num4[$i]=0;} else {$num4[$i]=0;}
if ($main_cycle!=3) {$num5[$i]=0;} else {$num5[$i]=0;}
if ($main_cycle==1)
{
$num6[$i] =0;
$num7[$i] =0;
$num8[$i] =0;
$num9[$i] =0;
$num10[$i]=0;
}
else
{
$num6[$i] =1;
$num7[$i] =1;
$num8[$i] =1;
$num9[$i] =1;
$num10[$i]=1;
}
}
}
$start_i=count($num1)-$k;
$stop_i=count($num1);
if ($cycle==0)
{ $r=$k2+$k;
echo "$k2+$k=$stop_i ($r) <p>";
}
$actual=array();
$previous=array();
$current = array();
$kelectro= array();
for ($i=$start_i; $i<$stop_i; $i++)
{ @$current[$i] = array ($num1[$i], $num2[$i], $num3[$i], $num4[$i], $num5[$i]);
@$previous[$i]= array ($num1[$i-1], $num2[$i-1], $num3[$i-1], $num4[$i-1], $num5[$i-1]);
@$kelectro[$i]= array ($num6[$i], $num7[$i], $num8[$i], $num9[$i], $num10[$i]);
$ai=$i-$start_i+1;
$actual[$ai]=0;
$c=0;
for ($t=0; $t<=$max_t; $t++) {$c=$c+$current[$i][$t];}
if ($c>0)
{
$p=0;
for ($t=0; $t<=$max_t; $t++) {$p=$p+$previous[$i][$t];}
if ($p==0)
{ for ($q=$i-1; $q>=0; $q--)
{ $previous[$i]= array ($num1[$q], $num2[$q], $num3[$q], $num4[$q], $num5[$q]);
for ($t=0; $t<=$max_t; $t++)
{ $p=$p+$previous[$i][$t]; }
if ($p>0) {break;}
}
}
if ($p>0)
{
for ($t=0; $t<=$max_t; $t++)
{ if (!isset($kelectro[$i][$t]) or $kelectro[$i][$t]==0) {$kelectro[$i][$t]=1;}
if ($previous[$i][$t]>9800 AND $previous[$i][$t]<99000 AND $current[$i][$t]<100) {$actual[$ai]=$actual[$ai]+(10000- $previous[$i][$t]+$current[$i][$t])*$kelectro[$i][$t];}
elseif ($previous[$i][$t]>99000 AND $current[$i][$t]<1000) {$actual[$ai]=$actual[$ai]+(100000-$previous[$i][$t]+$current[$i][$t])*$kelectro[$i][$t];}
else {$actual[$ai]=$actual[$ai]+($current[$i][$t]-$previous[$i][$t])*$kelectro[$i][$t];}
}
//----------------- ВИКЛЮЧЕННЯ
$vyk=0;
@$result=mysql_query("SELECT `z`, `na` FROM `exception` WHERE `subkategory`='$element[$cycle]'") or die("Query exception не працює");
while (@$line = mysql_fetch_row($result))
{
@$mass_z[$vyk]=$line[0];
@$mass_na[$vyk]=$line[1];
@$vyk++;
}
if(@count($mass_z)>0)
{
for ($vyk=0; $vyk<count($mass_z); $vyk++)
{
if (@$actual[$ai]==$mass_z[$vyk])
{ @$actual[$ai]=$mass_na[$vyk];
}
}
}
//----------------- //ВИКЛЮЧЕННЯ
}
}
if (empty($actual[$ai]) or $actual[$ai]<0) {$actual[$ai]=0;}
$actual[$ai]=round($actual[$ai], $kilkist_znakiv_pislya_komy);
}
Спустя 19 минут, 29 секунд (13.05.2012 - 17:53) okapo написал(а):
А че не делаешь через INTERVAL ? на много проще нет ?
Спустя 1 час, 46 минут, 38 секунд (13.05.2012 - 19:40) Skesh написал(а):
он както сюда не оч подходит.
Спустя 56 минут, 30 секунд (13.05.2012 - 20:36) Placido написал(а):
Почему не подходит (если, конечно, версия PHP >= 5.3.0)?
$date1 = new DateTime();
$date2 = clone $date1;
$date2->sub(new DateInterval('P1M'));
echo $date2->format('Y-m-t') . '<br/>';
echo $date1->format('Y-m-01');
_____________
*пускает слюну, глядя на код* :)