私は現在、何が基本的な作業にすべきかと苦労しています。私は開始日、終了日、およびカウントを持っています。私は1時間に何回、第3のパラメータ(カウント)が2つの日付の間に減少するかを計算する必要があります:そう、毎時のように。PHP日付の間のカウントを減らす
そのビット、私はOKをカバーしていると思います。問題は今すぐに来る。
私たちのウェブサイトが開けば、になるだけです。これらの時間は配列に格納され、0
インデックスは開いており、1
は近いです。また、日付は動的にnow
に更新されます。
Array
(
[mon] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 21:30
)
[tue] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 21:30
)
[wed] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 21:30
)
[thu] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 21.30
)
[fri] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 19:00
)
[sat] => Array
(
[0] => 2012-04-03 9:00
[1] => 2012-04-03 18:00
)
[sun] => Array
(
[0] => 2012-04-03 10:30
[1] => 2012-04-03 19:00
)
)
したがって、1時間ごとにカウンターが減少しますが、開幕時間の間です。しかし、我々が閉鎖されている場合、カウンターがになるまでの時間を今日までに計算する必要があります。
openTimes
には、現在開いているか閉じているかを確認するために使用できるareWeOpen
という変数があります。私たちは、しかし、常に動作していないよういくつかのコードを持っている:
function countOffers($start, $end, $deals) {
global $openTimes;
if(strtotime($end) < time()) return 1;
define('ONEHOUR', 1);
$totalDays = unixtojd(strtotime($end)) - unixtojd(strtotime($start));
$daysBefore = unixtojd(time()) - unixtojd(strtotime($start));
$daysAfter = unixtojd(strtotime($end)) - unixtojd(time());
$startDay = strtolower(date("D", strtotime(date("Y-m-d", strtotime($start)))));
$totalHours = 0;
$hoursBefore = 0;
/* TOTAL HOURS */
for($i = 0; $i <= $totalDays; $i++) {
$dayName = strtolower(date("D", strtotime(date("Y-m-d", strtotime($start)) . " +$i days")));
$day = $openTimes->openDays[$dayName];
if($i === 0) {
$startHour = explode(" ", $start);
$startHour = str_replace(array(":","3"), array(".","5"), $startHour[1]);
$endHour = explode(" ", $day[1]);
$endHour = str_replace(array(":","3"), array(".","5"), $endHour[1]);
$totalHours += $endHour - $startHour;
} else {
$tempHour = (strtotime($day[1]) - strtotime($day[0]))/3600;
$totalHours += (strtotime($day[1]) - strtotime($day[0]))/3600;
}
}
$perHour = round($deals/$totalHours, 1);
$today = 0;
if($openTimes->areWeOpen === FALSE && $openTimes->morning === FALSE) {
/* HOURS UP TO TODAY */
for($i = 0; $i < $daysBefore; $i++) {
$day = $openTimes->openDays[strtolower(date("D", strtotime(date("Y-m-d", strtotime($start)) . " +$i days")))];
$hoursBefore += (strtotime($day[1]) - strtotime($day[0]))/3600;
}
} elseif (strtotime($start) <= time()) {
/* HOURS UP TO YESTERDAY */
for($i = 0; $i < ($daysBefore-1); $i++) {
$day = $openTimes->openDays[strtolower(date("D", strtotime(date("Y-m-d", strtotime($start)) . " +$i days")))];
$hoursBefore += (strtotime($day[1]) - strtotime($day[0]))/3600;
}
if(strstr($start, date("Y-m-d", time()))) {
$today = ceil((time() - strtotime($start))/3600) - ONEHOUR;
} else {
$today = ceil((time() - strtotime($openTimes->openDays[strtolower(date("D", time()))][0]))/3600) - ONEHOUR;
}
}
$alreadyGone = $hoursBefore*$perHour;
$dealsLeft = $deals - (($hoursBefore*$perHour) + ($today*$perHour));
if($dealsLeft < 0.5) $dealsLeft = 1;
return round($dealsLeft);
}
それが正しくカウントだろう、しかし、我々が閉じているとき、それは減少し続けるだろう苦労しているようです。私はこれを行うためのより良い方法が必要であることを知っている、私はそれを把握することはできません。あまりにも頭の中の問題を複雑すぎると思っています。
* 編集:営業時間中に
(配列で提供)私は時の倍の値x
量を減少させる必要があります:*さて、ここで私が達成しようとしているかのブレークダウンがありますその日。閉鎖されている場合は、の最後のの終了時刻までその値を減らしたいだけです。
カウンタの開始日、終了日、開始番号が与えられます。毎日午前9時から午後9時の間、値は減少する可能性があります。その時間が過ぎている場合、または現在閉鎖されている場合は、最後の閉鎖時刻(潜在的には昨日)まで減少させたいだけです。
トピックはありませんが、私は本当になぜウェブサイトに営業時間があるのか興味があります。 – JJJ
このような電話を受けるスタッフがいないため、オンラインでは何も販売していません。私たちのウェブサイトはオンラインのパンフレットのようなものです。 – James
@Jamesあなたは好きかもしれません...あなたのウェブサイトでは、特定の時間に電話をしないように簡単に言っています..? –