إنشاء تواريخ متكررة في PHP استنادا إلى التاريخ الحالي، والمنطقية من أجل القيام به أم لا

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

  •  19-09-2019
  •  | 
  •  

سؤال

إلو،

أنا تكافح مع بعض مشاكل التاريخ هنا في PHP / MYSQL. لدي نموذج يوفر تكرار الدفع سنويا أو ربع سنوي أو شهريا أو أسبوعيا أو أسبوعيا وأحتاج إلى أن أكون قادرا على تتبع عند إجراء الدفعات.

لذلك على سبيل المثال، إذا تمت إضافة شيء ما يوم الاثنين 8 مارس (هذا هو التاريخ الذي يتم فيه إدخاله)، فإن الأسبوعية المتكررة أسبوعيا يوم الخميس (سينظر المستخدم إلا بعد أيام العرض المنسدلة من الأسبوع - كما تكرار أسبوعي)، وسوف أدخل تواريخ استحقاق 52 (أسبوعيا) في DB (Julian / كل ما هو أسهل)، وتمييز أول 9 منها المدفوعة (منذ تلك الأيام الماضية)؛ الباقي دخل ولكن ملحوظ غير مدفوع.

لدي جدول من شأنه إدخال كل دعامات، مع وجود رابط إلى مزيد من التفاصيل، وحقل خرطوم مدفوع / غير مدفوع.

لذلك في المثال أعلاه، سيبدو جدول المدفوعات شيئا مثل:

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 كل صباح، وأنا فقط أحصل على المزيد من الخلط.

أي أفكار / اقتراحات / مؤشرات سيكون موضع تقدير كبير.

هتافات.


قص

$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 الجديدة لها يضيف الطريقة التي يمكنك استخدامها لتوليد كل هذه التواريخ.

$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