在PHP中将本地假日添加到日期/时间计算中
我想展示一下我店的预计交货时间。 如果客户在下午4点之前下单,他会在第二天收到订单。 但如果订单是在周五或周末,他会在下周一收到订单 一切正常。但我需要根据我国的一个州增加一些假期,如圣诞节、新年和当地假期 我找到了一个解决方案来确定我所在州固定和灵活(如复活节)的假期 但我不知道如何在当前函数中使用它们。 如果在这些假期之前下订单,我需要将未来日期提前几天 以下是当前代码(基于):在PHP中将本地假日添加到日期/时间计算中,php,date,datetime,woocommerce,strtotime,Php,Date,Datetime,Woocommerce,Strtotime,我想展示一下我店的预计交货时间。 如果客户在下午4点之前下单,他会在第二天收到订单。 但如果订单是在周五或周末,他会在下周一收到订单 一切正常。但我需要根据我国的一个州增加一些假期,如圣诞节、新年和当地假期 我找到了一个解决方案来确定我所在州固定和灵活(如复活节)的假期 但我不知道如何在当前函数中使用它们。 如果在这些假期之前下订单,我需要将未来日期提前几天 以下是当前代码(基于): date\u default\u timezone\u set('european/Berlin'); $cur
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语句来检查所有条件,因此我更喜欢不同的方法
它是这样的
14/07/2020
,
可能的日期为2020年7月14日、15日、16日、17日、18日、19日、20日和21日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;