Создание повторяющихся дат в PHP на основе текущей даты и логического значения «выполнено или нет».

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

  •  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];
}
?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top