현재 날짜를 기준으로 PHP에서 반복 날짜를 만들고 완료 여부에 대한 부울

StackOverflow https://stackoverflow.com/questions/2231072

  •  19-09-2019
  •  | 
  •  

문제

엘로,

PHP/MySQL에서 데이트 문제로 어려움을 겪고 있습니다. 나는 매년, 분기 별, 매월, 격주 또는 주간 또는 주간 지불의 재발을 제공하는 양식이 있으며 지불이 이루어질 때 추적 할 수 있어야합니다.

예를 들어, 3 월 8 일 월요일에 무언가가 추가되면 (입력 날짜) 목요일에 매주 되풀이되는 경우 (사용자는 요일을 제공하는 드롭 다운을 볼 수 있습니다. 52 (주간) 마감일을 DB (Julian/가장 쉬운 것)에 입력하고, 그 중 첫 9 명을 지불하십시오 (그 시절은 과거 이후). 나머지는 입력되었지만 무급으로 표시되었습니다.

나는 지불 세부 사항에 대한 링크와 부울 필드가 지불/지불되지 않는 각 aprue_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);
}
도움이 되었습니까?

해결책

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

다른 팁

새로운 PHP 날짜 기능에는 다음과 같습니다 추가하다 이 모든 날짜를 생성하는 데 사용할 수있는 방법.

$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;
}

이것은 재발 일의 예입니다.

이 기능은 일주일 동안 주당 재발의 날을 반환합니다. 예상 : 52 주 동안 2010 년 5 월 6 일부터 시작하는 모든 일.

<?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];
}
?>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top