2011-06-30 3 views
1

Langue utilisée: PHPDate de rupture dans le code des exercices php

J'ai un formulaire pour entrer
CNombre
DateFrom
DateTo

En cliquant sur Envoyer, je veux la fonctionnalité de briser les dates en années financières.
EG- agrofourniture formulaire ci-dessus
CNombre: 1
DateFrom: 12/12/2013
DateTo: 31/03/2014

ensuite les valeurs à insérer dans le tableau (sortie) doit être
CNombre: 1
DurationFrom: 12/12/2011
DurationTo: 31/03/2012

CNombre: 1
DurationFrom: 04/01/2012
DurationTo: 31/03/2013

CNombre: 1
DurationFrom: 01/04/2013
DurationTo: 31/03/2014

J'espère que la logique est claire.
Je suis incapable de coder le problème ci-dessus.

Merci pour votre aide .. !!

Répondre

1

Vous pouvez utiliser la fonction mktime() pour atteindre votre sortie! par exemple il y a un code simple mais, si vous cherchez plus vous pouvez écrire que vous voulez:

list($df_day,$df_month,$df_year) = split('/',$durationFrom); 
list($dt_day,$dt_month,$dt_year) = split('/',$durationTo); 
$newDurationFrom = date("dd/mm/yyyy",mktime(0,0,0,$df_month,$df_day,($df_year+[YOUR VALUE HERE]))); 
$newDurationTo = date("dd/mm/yyyy",mktime(0,0,0,$dt_month,$dt_day,($dt_year-[YOUR VALUE HERE]))); 
0

En supposant que $cNumber, $dateFrom, $dateTo sont vos variables PHP qui stockent le CNombre, De date et à ce jour respectivement après la soumission du formulaire.

$objDateFrom = new DateTime(str_replace('/', '-', $dateFrom)); // create DateTime object for from-date 
$objDateTo = new DateTime(str_replace('/', '-', $dateTo)); // create DateTime object for to-date 
$fromYear = $objDateFrom->format('Y'); 
$toYear = $objDateTo->format('Y'); 
$fromDate = $objDateFrom->format('Y-m-d'); 
$toDate = $objDateTo->format('Y-m-d'); 

$arrObjDates[] = new DateTime($fromDate); // this array stores DateTime objects for from-date and to-date plus all intermediary dates; by default it always stores from-date as the first element 
for ($i = $fromYear; $i <= $toYear; $i++) { 
    $tmpDate = $i . '-03-31'; 
    if ($i == $fromYear) { // the first iteration 
     if ($fromDate > $tmpDate) { // if from-date is after the FY end date in the same year, skip further loop execution 
      continue; 
     } 
    } 
    if ($i == $toYear) { // the last iteration 
     if ($toDate > $tmpDate) { // if to-date is after the FY end date in the same year, store the FY end date 'yyyy-03-31' 
      $arrObjDates[] = new DateTime($tmpDate); 
     } 
     $arrObjDates[] = new DateTime($toDate); 
    } else { 
     $arrObjDates[] = new DateTime($tmpDate); 
    } 
} 

$qry = ''; 
if (!empty($arrObjDates)) { 
    $qry = 'INSERT INTO `tableA` (`c_number`, `date_from`, `date_to`) VALUES'; 
    for ($idx = 0; $idx < count($arrObjDates) - 1; $idx++) { 
     if ($idx > 0) { 
      $qryFromDate = $arrObjDates[$idx]->format('Y') . '-04-01'; 
     } else { 
      $qryFromDate = $arrObjDates[$idx]->format('Y-m-d'); 
     } 
     $qry .= '(' . $cNumber . ', \'' . $qryFromDate . '\', \'' . $arrObjDates[$idx+1]->format('Y-m-d') . '\'),'; 
    } 
} 
$qry = trim($qry, ','); 

Il m'a fallu du temps pour coder ceci mais à la fin j'espère que cela devrait fonctionner. Je n'ai pas essayé de simplifier le code, mais je suis sûr qu'il y a des façons de le faire.

+0

Effort brillant de votre part Abhay !! Mais je suis incapable de l'implémenter dans un fichier PHP. Pouvez-vous télécharger votre fichier ci-dessus et publier l'URL s'il vous plaît? – Techno

+0

Merci @Techno. Mon code ci-dessus est le seul code que le script PHP a; il n'y a rien de plus dedans. Quel problème avez-vous en train de le mettre en œuvre? – Abhay

+0

Il y a un problème lors de l'insertion, c'est l'affichage de la requête à la place. Puisque vous avez déjà implémenté le code, pouvez-vous partager ce fichier WORKING? – Techno