Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中将本地假日添加到日期/时间计算中_Php_Date_Datetime_Woocommerce_Strtotime - Fatal编程技术网

在PHP中将本地假日添加到日期/时间计算中

在PHP中将本地假日添加到日期/时间计算中,php,date,datetime,woocommerce,strtotime,Php,Date,Datetime,Woocommerce,Strtotime,我想展示一下我店的预计交货时间。 如果客户在下午4点之前下单,他会在第二天收到订单。 但如果订单是在周五或周末,他会在下周一收到订单 一切正常。但我需要根据我国的一个州增加一些假期,如圣诞节、新年和当地假期 我找到了一个解决方案来确定我所在州固定和灵活(如复活节)的假期 但我不知道如何在当前函数中使用它们。 如果在这些假期之前下订单,我需要将未来日期提前几天 以下是当前代码(基于): date\u default\u timezone\u set('european/Berlin'); $cur

我想展示一下我店的预计交货时间。 如果客户在下午4点之前下单,他会在第二天收到订单。 但如果订单是在周五或周末,他会在下周一收到订单

一切正常。但我需要根据我国的一个州增加一些假期,如圣诞节、新年和当地假期

我找到了一个解决方案来确定我所在州固定和灵活(如复活节)的假期

但我不知道如何在当前函数中使用它们。 如果在这些假期之前下订单,我需要将未来日期提前几天

以下是当前代码(基于):

date\u default\u timezone\u set('european/Berlin');
$current_year=日期('Y');
$next_year=日期('Y',标准时间('current_year.“+1年”);
//假日
$neujahr=日期('d.m.Y',标准时间($next_year.-01-01'));
$ostern=日期('d.m.Y',复活节日期($当前年份));
$karfreitag=日期(“l jS F”,标准时间($ostern.-2天”);
$Ostermantag=日期(“l jS F”,标准时间($ostern.+1天”);
$tagderarbeit=日期('d.m.Y',标准时间('Y-05-01'));
$himmelfahrt=日期(“l jS F”,标准时间($ostern.+39天”);
$pfingstmontag=日期(“l jS F”,标准时间($ostern.+50天”);
$fronleichnam=日期(“l jS F”,标准时间($ostern.+60天”);
$einheit=日期('d.m.Y'),标准时间('Y-10-03');
$Allerheligen=日期('d.m.Y',标准时间('Y-11-01');
$1=日期('d.m.Y',标准时间('Y-12-25');
$2=日期('d.m.Y',标准时间('Y-12-26');
//如果星期五/星期六/星期一交货
如果(日期('N')>=5){
$del_day=日期(“l jS F”,标准时间(“下周一”);
$order_by=“星期一”;
}
//如果周一/周四下午4点后交货,则为明天
elseif(日期('H')>=16){
$del_day=日期(“l jS F”,标准时间(“明天”);
$order_by=“明天”;
}
//如果周一/周四下午4点之前交货,则为今天
否则{
$del_day=日期(“l jS F”,标准时间(“今天”);
$order_by=“今日”;
}
$html=“
在下午4点前订购{$Order\u by},以便在{$delu day}交货”; echo$html;
您当前应用的工作方法可以使用多个不同的if/else语句来检查所有条件,因此我更喜欢不同的方法

它是这样的

  • 截至今天,生成了8个可能的交付日期(expl:today=
    14/07/2020
    , 可能的日期为2020年7月14日、15日、16日、17日、18日、19日、20日和21日
  • 如果今天已在下午4点之后,则今天的日期将过期(
    14/07/2020
  • 小于
    4 pm
    但为周五、周六或周日,删除日期
  • 然后删除周末的(其他)日期:周五、周六和周日(
    17、18、19/07/2020
  • 然后从结果中筛选出所有假期(如果有)
  • 在最后一步中,使用结果中的第一个值并显示在输出消息中

    • 注意:通过调整
      $today=date('d.m.Y');
      值很容易进行测试​​到将来的任何日期,如
      $today=date('25.12.2024');
      将返回
      • 12月30日星期一交货
      • 25、26
        =节假日。
        27、28和29/12/2024
        =周五、周六和周日
    date\u default\u timezone\u set('european/Berlin');
    //今天
    $today=日期('d.m.Y');
    //可能从今天开始交货
    对于($i=0;$i=16){
    //今天不可能
    未设置(可能的交货日期[0]);
    }elseif(日期('N',标准时间($today))>=5){
    //今天(周末)不可能
    未设置(可能的交货日期[0]);
    }
    //下周五、周六和周日
    $next_friday=日期('d.m.Y',标准时间($today.'next friday');
    $next_saturday=日期('d.m.Y',标准时间($today.'next saturday');
    $next_sunday=日期('d.m.Y',标准时间($today.'next sunday');
    //删除下一个星期五、星期六和星期日
    $mablue_delivery_dates=array_diff($mablue_delivery_dates,[$next_周五,$next_周六,$next_周日]);
    //本年度和下年度
    $current_year=日期('Y',标准时间($today));
    $next_year=日期('Y',strottime($today.'+1年));
    //假日
    $neujahr=日期('d.m.Y',标准时间($next_year.-01-01'));
    $ostern=日期('d.m.Y',复活节日期($current_year));
    $karfreitag=日期('d.m.Y',标准时间($ostern.-2天));
    $ostermontag=日期('d.m.Y',标准时间($ostern.+1天));
    $tagderarbeit=日期('d.m.Y',标准时间(日期($current_year.-05-01'));
    $himmelfahrt=日期('d.m.Y',标准时间($ostern.+39天));
    $pfingstmontag=日期('d.m.Y',标准时间($ostern.+50天));
    $fronleichnam=日期('d.m.Y',标准时间($ostern.+60天));
    $einheit=日期('d.m.Y',标准时间(日期($current_year.-10-03'));
    $allerheligen=日期('d.m.Y',标准时间(日期($current_year.-11-01'));
    $1=日期('d.m.Y',标准时间(日期($current_year.-12-25'));
    $2=日期('d.m.Y',标准时间(日期($current_year.-12-26'));
    //假日(阵列)
    $holidays=array($neujahr、$ostern、$karfreitag、$ostermontag、$tagderarbeit、$himmelfahrt、$Pfingtmontag、$fronleichnam、$einheit、$allerheiligen、$Weihnachden1、$Weihnachden2);
    //取消假期
    $mably_delivery_dates=array_diff($mably_delivery_dates,$holidays);
    //第一值
    $first\u val=重置(可能的交货日期);
    $html='Delivery on'.date('l jS F',strottime('first_val));
    echo$html;
    
    我想你会在这里找到答案的。谢谢,我找到了一种获取我所在州假期的方法。但我不知道如何在当前功能中使用它们。如果在其中一个假期之前下订单,我需要提前几天移动未来日期。谢谢!这是一个很好的答案。我只是不知道如何添加日期范围。我f第一个可能的日期是
    date_default_timezone_set( 'Europe/Berlin' );
    
    $current_year   = date('Y');
    $next_year      = date('Y', strtotime( $current_year." + 1 year" ));
    
    // Holidays
    $neujahr        = date('d.m.Y',strtotime(date($next_year.'-01-01')));
    $ostern         = date('d.m.Y', easter_date($current_year));
    $karfreitag     = date( "l jS F", strtotime( $ostern." - 2 days" ) );
    $ostermontag    = date( "l jS F", strtotime( $ostern." + 1 days" ) );
    $tagderarbeit   = date('d.m.Y',strtotime(date('Y-05-01')));
    $himmelfahrt    = date( "l jS F", strtotime( $ostern." + 39 days" ) );
    $pfingstmontag  = date( "l jS F", strtotime( $ostern." + 50 days" ) );
    $fronleichnam   = date( "l jS F", strtotime( $ostern." + 60 days" ) );
    $einheit        = date('d.m.Y',strtotime(date('Y-10-03')));
    $allerheiligen  = date('d.m.Y',strtotime(date('Y-11-01')));
    $weihnachten1   = date('d.m.Y',strtotime(date('Y-12-25')));
    $weihnachten2   = date('d.m.Y',strtotime(date('Y-12-26')));
    
    // if FRI/SAT/SUN delivery will be MON
    if ( date( 'N' ) >= 5 ) {
      $del_day = date( "l jS F", strtotime( "next monday" ) );
      $order_by = "Monday";
    }
    
    // if MON/THU after 4PM delivery will be TOMORROW
    elseif ( date( 'H' ) >= 16 ) {
      $del_day = date( "l jS F", strtotime( "tomorrow" ) );
      $order_by = "tomorrow";
    }
    
    // if MON/THU before 4PM delivery will be TODAY
    else {
      $del_day = date( "l jS F", strtotime( "today" ) );
      $order_by = "today";
    }
    
    $html = "<br><div class='woocommerce-message' style='clear:both'>Order by 4PM {$order_by} for delivery on {$del_day}</div>";
    
    echo $html;