Создание повторяющихся дат в PHP на основе текущей даты и логического значения «выполнено или нет».
-
19-09-2019 - |
Вопрос
Элло,
Я борюсь с некоторыми проблемами с датами здесь, в PHP/MySql.У меня есть форма, которая предлагает повторение платежа ежегодно, ежеквартально, ежемесячно, раз в две недели или еженедельно, и мне нужно иметь возможность отслеживать, когда производятся платежи.
Так, например, если что-то будет добавлено в понедельник, 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
и т. д...
Проблема, ну, во всем.Система календаря настолько изношена, что, кажется, не существует реального логического и простого способа сделать это.Я все утро ломал голову, ища руководство по Goggle и PHP Date, и все больше запутывался.
Будем очень признательны за любые идеи/предложения/указания.
Ваше здоровье.
[отрывок]
$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 Date имеют добавлять метод, который вы можете использовать для создания всех этих дат.
$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;
}
Это пример повторения дней.
Эта функция возвращает день повторения в неделю в течение периода.Пример:Весь четверг, начиная с 06 мая 2010 г. в течение 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];
}
?>