Création dates récurrentes en PHP basé sur la date actuelle et booléennes fait ou non

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

  •  19-09-2019
  •  | 
  •  

Question

Ello,

Je me bats avec des problèmes de date ici en PHP / MySql. J'ai une forme qui offre la récurrence d'un paiement annuel, trimestriel, mensuel, toutes les deux semaines ou toutes les semaines et je dois être en mesure de suivre lorsque les paiements sont effectués.

Ainsi, par exemple, si quelque chose est ajouté le lundi 8 Mars (qui est la date à laquelle il est entré), récurrente hebdomadaire le jeudi (l'utilisateur ne verriez un menu déroulant proposant des jours de la semaine - que la récurrence est hebdomadaire) , il entrerait les 52 (par semaine) les dates d'échéance dans la db (julian / ce qui est plus facile), et marquer la première 9 d'entre eux payés (étant donné que ces jours sont passés); le reste est entré, mais marqué non payé.

J'ai une table qui aurait chaque entrée due_date, avec un lien vers le détail de paiement, et un champ booléen payé / non payé.

Ainsi, dans l'exemple ci-dessus, la table des paiements ressemblerait à quelque chose comme:

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

etc ...

Le problème est, bien, tout. Le système est tellement effed calandrage jusqu'à, qu'il semble pas de véritable moyen logique / simple à faire. J'ai creusé la cervelle, la recherche manuelle et la date de goggle php toute la matinée, et je suis juste plus confus.

Toutes les idées / suggestions / pointeurs seraient grandement appréciés.

Vive.


[snip]

$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);
}
Était-ce utile?

La solution

Vous voudrez peut-être regarder strtotime: http://php.net/manual /en/function.strtotime.php , vous pourriez boucle sur cette jusqu'à la fin de la période (dans ce cas 52 semaines).

for i = 1, i <= 52, i++
    insert date(mm / dd / YY, strtotime(+ i week));
/for

Autres conseils

Les nouvelles fonctions de date PHP ont une méthode ajouter que vous peut utiliser pour générer toutes ces dates.

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

un exemple de jours de récurrence.

Cette fonction retourne un jour de récurrence par semaine au cours d'une période. Exemple:. Tous Thurday à partir de mai 2010, au cours 06 52 semaines

<?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];
}
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top