Yinelenen geçerli tarihe göre PHP tarihleri ​​ve boolean done için veya oluşturma

3 Cevap php

, Ello

Burada PHP / MySQL bazı tarih sıkıntılar ile mücadele ediyorum. Ben yıllık, aylık, üç aylık bir ödeme tekrarını sunan bir form var, ya da haftalık haftalık-bi ve ödendikçe izlemek gerekiyor.

Bir şey Pazartesi 8 Mart eklendi eğer Yani, örneğin, Perşembe Haftalık tekrarlayan, (o girilen ediliyor date) (kullanıcı sadece haftanın günlerini sunan açılan görecekti - nüks haftalık olduğu gibi), o-cekti db içine 52 (haftalık) bitiş tarihlerini (Jülyen / ne olursa olsun kolay olan) girin ve (o gün geçmiş olduğundan) ödenen Bunlardan ilk 9 işaretlemek; Gerisi girdi ama ödenmemiş işaretlenmiş.

Ben ödeme ayrıntılı bir bağlantı ve / ödenmeyen ödenen bir Boole alanı, her DUE_DATE girişi olurdu bir tablo var.

Yani yukarıdaki örnekte, ödemeler tablo gibi görünecektir:

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

vs ..

Sorun iyi, her şey olduğunu. Takvim sistemi yani bunu yapmak için hiçbir gerçek mantıksal / basit bir yolu var görünüyor ki, yukarı effed edilir. Ben, benim beyin bozucu her sabah goggle ve php tarih manuel arama, ve ben sadece daha karıştı alıyorum oldum.

Herhangi bir fikir / öneri / işaretçiler büyük takdir.

Şerefe.


[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);
}

3 Cevap

Sen strtotime bakmak isteyebilirsiniz: http://php.net/manual/en/function.strtotime.php, sen (bu durumda 52 hafta içinde) dönem sonu o üzerinde döngü ulaşabilir kadar.

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

Yeni PHP Tarih işlevleri tüm bu tarihleri ​​oluşturmak için kullanabileceğiniz bir add yöntemi var.

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

Nüks Bu gün bir örnektir.

This function return a recurrence day per week during a period. Exemple: All Thurday starting from 06 May 2010 during 52 weeks.

<?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];
}
?>