1

エロ、

ここPHP/MySqlで日付の問題に苦しんでいます。毎年、四半期ごと、毎月、隔週、または毎週の繰り返しの支払いを提供するフォームがあり、いつ支払いが行われたかを追跡できる必要があります。

したがって、たとえば、3 月 8 日の月曜日 (入力日) に何かが追加され、毎週木曜日に繰り返される場合 (繰り返しは毎週であるため、ユーザーには曜日を提供するドロップダウンのみが表示されます)、次のようになります。 52 (毎週) の期日をデータベースに入力し (ジュリアン/最も簡単なもの)、そのうちの最初の 9 日に支払われたものをマークします (これらの日は過ぎているため)。残りは入力されましたが、未払いとマークされました。

各 due_date エントリ、支払いの詳細へのリンク、および支払われた/支払われていないブールフィールドを持つテーブルがあります。

したがって、上記の例では、支払いテーブルは次のようになります。

id | pmnt_id | due_date | is_paid
1  |  0023   | 01/07/10 | 1
2  |  0023   | 01/14/10 | 1
3  |  0023   | 01/21/10 | 1
10 |  0023   | 03/25/10 | 0
11 |  0023   | 04/01/10 | 0

等...

問題は、まあ、すべてです。カレンダーシステムは非常に複雑であるため、これを行うための実際の論理的/簡単な方法はないようです. 私は頭を悩ませ、ゴーグルと PHP の日付マニュアルを午前中ずっと検索していましたが、ますます混乱しています。

アイデア/提案/ポインタは大歓迎です。

乾杯。


[をちょきちょきと切る]

$startDate = strtotime("$currentDay $currentMonthFull $currentYear");
$stTimeFormatted = strftime('%d/%m/%Y',$startDate);
$numPmnts = ($totalWeeks-$currentWeek);
for($i=0;$i<$numPmnts;$i++){
    $ddates=array(
    'sched_pay_id'=>$pmntID,
    'due_date'=>date('m/d/y', strtotime('+'.$i.' week', $startDate)),
    'is_paid'=>0,
    );
    $this->db->insert('sched_payments',$ddates);
}
4

3 に答える 3

2

strtotime: http://php.net/manual/en/function.strtotime.phpを見たいと思うかもしれません。期間の終わり (この場合は 52 週間) に達するまでそれをループすることができます。

for i = 1, i <= 52, i++
    insert date(mm / dd / YY, strtotime(+ i week));
/for
于 2010-02-09T17:37:00.140 に答える
0

これは繰り返しの日の例です。

この関数は、期間中の週ごとの繰り返し日を返します。例: 2010 年 5 月 6 日から始まる 52 週間のすべての木曜日。

<?php 
//function
function nextWeeksDay($date_begin,$nbrweek)
{
$nextweek=array();
for($i = 1; $i <= $nbrweek; $i++)  { // 52 week in one year of course
$nextweek[$i]=date('D d M Y', strtotime('+'.$i.' week',$date_begin));
}
return $nextweek;
}
/// end function 
/// example of a select date 
// var
$date_begin = strtotime('06-05-2010'); //D Day Month Year  - like function format.
$nbrweek=52;
// call function
$result=nextWeeksDay($date_begin,$nbrweek);
// Preview 
for($i = 1; $i <= $nbrweek; $i++)  {
echo '<br> - '.$result[$i];
}
?>
于 2010-05-06T15:30:34.497 に答える
0

新しい PHP Date 関数には、これらすべての日付を生成するために使用できるaddメソッドがあります。

$startDate = new DateTime();

// "Period of 1 Week
$interval = new DateInterval("P1W");

// Will cycle from 1st week's due date to the end of payment cycle
for($i = 1; $i <= 52; $i++) {
    $dueDate = $date->add($interval);
    $date = $dueDate;
}
于 2010-02-09T17:57:40.727 に答える