/[openfoncier]/branches/3.14.0-b13/obj/utils.class.php
ViewVC logotype

Diff of /branches/3.14.0-b13/obj/utils.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2757 by softime, Wed Feb 19 17:46:10 2014 UTC revision 2786 by softime, Tue Mar 4 15:37:20 2014 UTC
# Line 986  class utils extends application { Line 986  class utils extends application {
986          // Condition retournée          // Condition retournée
987          return $whereContraintes;          return $whereContraintes;
988      }      }
989    
990        /**
991         * Calcule une date par l'ajout ou la soustraction de mois
992         * @param date    $date     Date de base
993         * @param integer $delay    Délais à ajouter (en mois)
994         * @param string  $operator Opérateur pour le calcul ("-" ou "+")
995         *
996         * @return date             Date calculée
997         */
998        function mois_date($date, $delay, $operator = "+") {
999    
1000            // Découpage de la date
1001            $temp = explode("-", $date);
1002            $day = (int) $temp[2];
1003            $month = (int) $temp[1];
1004            $year = (int) $temp[0];
1005    
1006            // Si c'est une addition
1007            if ($operator == '+') {
1008                // Année à ajouter
1009                $year += floor($delay / 12);
1010                // Mois restant
1011                $nb_month = ($delay % 12);
1012                // S'il y a des mois restant
1013                if ($nb_month != 0) {
1014                    // Ajout des mois restant
1015                    $month += $nb_month;
1016                    // Si ça dépasse le mois 12 (décembre)
1017                    if ($month > 12) {
1018                        // Soustrait 12 au mois
1019                        $month -= 12;
1020                        // Ajoute 1 à l'année
1021                        $year += 1;
1022                    }
1023                }
1024            }
1025    
1026            // Si c'est une soustraction
1027            if ($operator == "-") {
1028                // Année à soustraire
1029                $year -= floor($delay / 12);
1030                // Mois restant
1031                $nb_month = ($delay % 12);
1032                // S'il y a des mois restant
1033                if ($nb_month != 0) {
1034                    // Soustrait le délais
1035                    $month -= $nb_month;
1036                    // Si ça dépasse le mois 1 (janvier)
1037                    if ($month < 1) {
1038                        // Soustrait 12 au mois
1039                        $month += 12;
1040                        // Ajoute 1 à l'année
1041                        $year -= 1;
1042                    }
1043                }
1044            }
1045    
1046            // Calcul du nombre de jours dans le mois sélectionné
1047            switch($month) {
1048                // Mois de février
1049                case "2":
1050                    if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1051                        $day_max = 29;
1052                    } else {
1053                        $day_max = 28;
1054                    }
1055                break;
1056                // Mois d'avril, juin, septembre et novembre
1057                case "4":
1058                case "6":
1059                case "9":
1060                case "11":
1061                    $day_max = 30;
1062                break;
1063                // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1064                default:
1065                    $day_max = 31;
1066            }
1067    
1068            // Si le jour est supérieur au jour maximum du mois
1069            if ($day > $day_max) {
1070                // Le jour devient le jour maximum
1071                $day = $day_max;
1072            }
1073    
1074            // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1075            $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1076            $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1077    
1078            // Retourne la date calculée
1079            return $year."-".$month."-".$day ;
1080        }
1081  }  }
1082    
1083  ?>  ?>

Legend:
Removed from v.2757  
changed lines
  Added in v.2786

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26