현재 날짜를 기준으로 PHP에서 반복 날짜를 만들고 완료 여부에 대한 부울
-
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];
}
?>