La creazione di ricorrenti date in PHP basato sulla data corrente, e booleano per fatto o non

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

  •  19-09-2019
  •  | 
  •  

Domanda

Ello,

Io sono alle prese con alcuni data di problemi qui in PHP/MySql.Ho un modulo che offre la ricorrenza di un pagamento annuale,trimestrale,mensile,bi-settimanale o settimanale e ho bisogno di essere in grado di tenere traccia di quando i pagamenti sono effettuati.

Così, per esempio, se c'è qualcosa di aggiunto, lunedì 8 Marzo (che è la data in cui è inserito), con ricorrenza Settimanale, il giovedì (l'utente vede solo una tendina che offre giorni della settimana, come la ricorrenza è settimanali), sarebbe entrato 52 (settimanale), le date di scadenza in db (julian/qualunque cosa è più semplice), e mark primi 9 di loro ha pagato (da quei giorni sono passato);il resto è entrato, ma contrassegnato non pagati.

Ho una tabella che avrebbe ogni due_date voce, con un link per il pagamento di dettaglio, e un campo Booleano pagato/non pagato.

Così nell'esempio sopra, tabella pagamenti, sarebbe qualcosa come:

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

ecc...

Il problema è, bene, tutto.Il sistema di calendario è così effed up, che ci sembra non reale logico/modo semplice per fare questo.Ho avuto la svinatura, il mio cervello, la ricerca e maschere php data manuale per tutta la mattina, e io sono sempre più confuso.

Tutte le idee/suggerimenti/consigli sarebbe molto apprezzato.

Ciao.


[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);
}
È stato utile?

Soluzione

Si potrebbe desiderare di guardare strtotime: http://php.net/manual/en/function.strtotime.php, si potrebbe eseguire un ciclo che fino alla fine del periodo (in questo caso 52 settimane).

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

Altri suggerimenti

Il nuovo PHP Data di funzioni hanno un aggiungere metodo che è possibile utilizzare per generare tutte queste 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;
}

Questo è un esempio di recidiva giorni.

Questa funzione restituisce una ricorrenza giorno alla settimana durante un periodo.Esempio:Tutti i Giovedì a partire dal 06 Maggio 2010 nel corso di 52 settimane.

<?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];
}
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top