2012-08-29 2 views
0

이것은 cronjob 스크립트입니다. cronjob은 1 분마다 실행 중입니다.시스템에서 PHP로 날짜를 기반으로 카운터에 추가 할 금액 계산

cronjob은 데이터베이스의 실시간 카운터 필드를 업데이트하는 것입니다.

start: 2012-08-29 09:55:00 
end: 2012-08-29 19:00:00 
limit: 5000 

어떻게 주어진 시작 날짜, 종료 날짜 및 제한에서 나는 밖으로 시스템이 카운터이 실행을 추가 할 수있는 수를 계산할 수 있습니다 :

나는 두 번 카운트 리미터가 있어요? 종료 날짜가 끝날 때 한계가

예를 입력 한

그래서 카운터로 큰해야한다, 지금 나는이있어 :

if ($setting['limit'] > $setting['counter']) 
{ 
     $rand = rand(5, 300); 

     DB::update('settings') 
     ->set(array('counter' => DB::expr('counter+ '.$rand))) 
     ->where('id', '=', $setting['id']) 
      ->execute(); 
} 

이것은 단순히 그냥 날에서 5 사이의 숫자를 제공합니다 및 300을 추가하고 스크립트의 새로 고침/실행을 카운터에 추가합니다.

카운터가 제한에 도달하지 못할 가능성이 큽니다. 예 : 시작 날짜와 종료 날짜가 서로 가깝고 임의 값이 100 미만이면 한계 5000에 도달하지 않습니다.

그러면 시작일과 종료일, 한도 및 현재 수를 기준으로 카운터에 추가 할 정확한 비율을 시스템에서 계산할 수 있습니까?

+0

당신은 당신이 될 수있는'counter'을 가지고 마지막에 할 말은'5000'? –

+0

카운터가 매시간 시작시 0에서 시작합니까? –

+0

@AlexLunix 데이터베이스에 저장하지 않습니다. – Karem

답변

1
Counter Limit * (Current time in minutes - Start time in minutes)/(End time in minutes - Start time in minutes) = Current counter number 

기본 비율을, 프로그래밍 질문보다는이 더 있지만 수학 문제 ... 또한

, 당신은 소수점을 지원하는 MySQL의 유형을 사용하지 않을 경우, 결과를 반올림해야 할 수도 있습니다 . 그래서 cron 작업에

:

$start=strtotime($setting["starttime"]);//Or whatever your local copy of the start time is 
$end=strtotime($setting["endtime"]);//Or whatever your local copy of the end time is 
$current=time(); 

$counter = $current>=$end?$setting["limit"]:round($setting['limit'] * ($current-$start)/($end-$start)); 

DB::update('settings') 
    ->set(array('counter' => $counter)) 
    ->where('id', '=', $setting['id']) 
     ->execute(); 
+0

안녕하세요, 답변 해 주셔서 감사합니다. 현재 카운터에서 3489 $ 카운터 now : 분당 1165 (cronjob 실행) <- thats way too high, 카운터는 현재 카운터에서 높이를 가져야합니다 ($ setting [ 'counter']) 종료 시간이 오후 7 시로 설정되고 여기 현재 시간이 오전 12 시인 경우 – Karem

+0

카운터가 이전 카운트를 기반으로해야합니까? @ Karem –

+0

루니 스, 그렇지 않다면 카운터에 너무 많은 숫자를 더할 것입니다. 아직 많은 cronjob 실행이 남았습니다. – Karem