Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Datumsaspekt

PHP-Datumsaspekt

巴扎黑
巴扎黑Original
2016-11-29 11:52:071128Durchsuche

date_default_timezone_set('PRC');
/**
* Erhalten Sie das Datum, nachdem eine bestimmte Anzahl von Tagen seit einem bestimmten Datum vergangen ist,
* schließen Sie Samstage, Sonntage und Feiertage aus
* @param $start Startdatum
* @param $offset Anzahl von Tage vergangen
* @param $Exception Ausnahmefeiertage
* @param $allow Zulässige Daten (reservierte Parameter)
* @return
* Beispiele: Eingabe (2010-06-25,5,'' ),get2010-07-02
*/
function getEndDay( $start='now', $offset=0, $exclusion='', $allow='' ){
//Berechnen Sie zuerst die Ergebnisse, ohne Samstage, Sonntage und Feiertage auszuschließen
$starttime = strtotime($start);
$endtime = $starttime + $offset * 24 * 3600;
$ end = date('Y-m-d', $endtime);
// Dann den durch Samstag und Sonntag verursachten Versatz berechnen
$weekday = date('N', $starttime);//Den Tag von abrufen die Woche Wert: 1-7
$remain = $offset % 7;
$newoffset = 2 * ($offset - $remain) / 7;//Zwei Tage müssen jede Woche neu berechnet werden
if ( $remain > 0 ){//Wochentag aufrunden
$tmp = $weekday + $remain;
if( $tmp >= 7 ){
$newoffset += 2;
}else if( $tmp == 6 ){
           $newoffset += 1; > $newoffset -= 1;
}else if( $weekday == 7 ){
$newoffset -= 2;
}
}
}
if( is_array($Exception) ){//Mehrere Feiertage
foreach ($Exception as $day){
$tmp_time = strtotime($day ); von Feiertagen und Wochenenden
                                                                                                                                                             =$endtime ){
$weekday_t = date('N', $tmp_time);
if($weekday_t <=. 5){
                                                     # , mach es rekursiv Äquivalente Operation
if($newoffset > 0){
  #echo "[{$start} -> {$offset}] = [{$end} -> {$newoffset}] "
n";
return getEndDay($end,$newoffset,$Exception,$allow);
}else{
        return $end;
    }
}
/**
* Violent-Loop-Methode
*/
function getEndDay2( $start='now', $offset=0, $Exception='', $allow= '' ){
    $starttime = strtotime($start);
    $tmptime = $starttime + 24*3600;
    
    while( $offset > 0 ){
        $weekday = date('N', $tmptime);
        $tmpday = date('Y-m-d', $tmptime);
        $bfd = false;//是否节假日
        if(is_array($Exception) ). < =5 && !$bfd){//不是周末和节假日
            $offset--;
            #echo "tmpday={$tmpday}"."
";
        }
   # 01-02','2010-01-03',
    '2010-04-03','2010-04-04','2010-04-05',
    '2010-05-01' ,'2010-05-02','2010-05-03',
    '2010-06-14','2010-06-15','2010-06-16',
    '2010- 09-22','2010-09-23','2010-09-24',
    '2010-10-01','2010-10-02','2010-10-03','2010 -10-04',
    '2010-10-05','2010-10-06','2010-10-07',
    
);
//echo getEndDay(' 2010-08-27',3,'');
//echo getEndDay('2010-06-25',15,'2010-07-07');
$t1 = microtime();
echo getEndDay('2010-05-12',66,$Exception)."
";
$t2 = microtime();echo "use ".($t2-$t1 )." s
";
echo getEndDay2('2010-05-12',66,$Exception)."
";
$t3 = microtime() ;echo "use ".($t3-$t2)." s
";    



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn