Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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_Strtotime - Fatal编程技术网

Php 检查字符串中的“工作日”是否介于“工作日”之间

Php 检查字符串中的“工作日”是否介于“工作日”之间,php,date,strtotime,Php,Date,Strtotime,所以我有一个工作日列表,我需要检查它们是否是当前日期。该列表在“周一/周二”和“周三-周五”之间变化 我当前的解决方案是字符串比较,因此它只检测当前工作日是否写入列表项 以下是当前的解决方案(PHP btw): 我在考虑创建一个包含所有工作日的数组,并将用户字段与数组中的当前位置进行比较,但我不确定这是否有效,甚至不可能 有没有比我现在做的更简单的方法 非常感谢您的任何意见 编辑: 我找到了一个有效的解决方案,我把它作为一个答案发布了出来(不过我在两天内不能选择它作为答案)。谢谢你的投入 是的,

所以我有一个工作日列表,我需要检查它们是否是当前日期。该列表在“周一/周二”和“周三-周五”之间变化

我当前的解决方案是字符串比较,因此它只检测当前工作日是否写入列表项

以下是当前的解决方案(PHP btw):

我在考虑创建一个包含所有工作日的数组,并将用户字段与数组中的当前位置进行比较,但我不确定这是否有效,甚至不可能

有没有比我现在做的更简单的方法

非常感谢您的任何意见

编辑:


我找到了一个有效的解决方案,我把它作为一个答案发布了出来(不过我在两天内不能选择它作为答案)。谢谢你的投入

是的,您的想法是可行的,并且不会严重影响性能,除非您在短时间内多次这样做,其中许多都是从几十万开始的。请注意,我已经创建了一个
数组
,该数组包含
$weekdays
,请注意,当您为
$class
赋值时,它也是循环的结束符号

setlocale(LC_ALL, "danish");
$day = get_sub_field('dag'); // the field containing the user input day

$currentDayLower = strtolower(date("D"));
$dayLowercase = strtolower($day);

$class = '';

if($dayLowercase === $currentDayLower)
   $class = ' current-day';
setlocale(LC_ALL, "danish");
$day = get_sub_field('dag'); // the field containing the user input day
$dayLowercase = strtolower($day);
$weekdays = array("monday", "tuesday", "wednesday", "thursday", "friday");

$class = '';

for ($index = 0, (!$class) && ($index < 5); $index++) {
    if(strpos($dayLowercase, $weekdays[$index]) !== false ){
        $class = ' current-day';
    } else{
        $class = '';
    }
}
setlocale(LC_ALL,“丹麦语”);
$day=获取子字段('dag');//包含用户输入日期的字段
$dayLowercase=strtolower($day);
$weekdays=数组(“星期一”、“星期二”、“星期三”、“星期四”、“星期五”);
$class='';
对于($index=0,(!$class)&($index<5);$index++){
if(strpos($dayLowercase,$weekdays[$index])!==false){
$class='当前日期';
}否则{
$class='';
}
}

如果要检查天数范围是否包括当前日期,可以执行以下操作

$period = 'Wednesday-Friday';
$limitDays = explode('-', $period);
$startDayName = trim(strtolower($limitDays[0]));
$endDayName = trim(strtolower($limitDays[1]));

$today = new DateTime();
$todayName = strtolower($today->format('l'));

// Check if the startDay or endDay is today.
echo "$startDayName $endDayName $todayName\n";
if ($startDayName === $todayName || $endDayName === $todayName) {
    echo "Same day\n";
    $class = 'current-day';
} else {
    // Get a date time representing the start day.
    $startDay = new \DateTime();
    $startDay->modify("next $startDayName");

    // Based on the start day, get the next current day.
    $thisDay = new \DateTime();
    $thisDay->modify("next $startDayName");
    $thisDay->modify("next $todayName");

    // Based on the start day, get the next end day.
    $endDay = new \DateTime();
    $endDay->modify("next $startDayName");
    $endDay->modify("next $endDayName");

    // Check if thisDay is between the startDay and endDay.
    if ($startDay < $thisDay && $thisDay < $endDay) {
        $class = 'current-day';
    } else {
        $class = '';
    }
}
echo $class . "\n";
$period='星期三-星期五';
$limitDays=爆炸('-',$period);
$startDayName=trim(strtolower($limitDays[0]);
$endDayName=trim(strtolower($limitDays[1]);
$today=新日期时间();
$todayName=strtolower($today->format('l'));
//检查开始日或结束日是今天。
回显“$startDayName$endDayName$todayName\n”;
如果($startDayName==$todayName | |$endDayName===$todayName){
回显“同一天\n”;
$class='当前日期';
}否则{
//获取表示开始日期的日期时间。
$startDay=new\DateTime();
$startDay->修改(“下一个$startDayName”);
//根据开始日期,获取当前下一天。
$thisDay=new\DateTime();
$thisDay->modify(“下一个$startDayName”);
$thisDay->modify(“下一个$todayName”);
//基于开始日,获取下一个结束日。
$endDay=new\DateTime();
$endDay->modify(“下一个$startDayName”);
$endDay->modify(“下一个$endDayName”);
//检查这一天是否在开始日和结束日之间。
如果($startDay<$thisDay&$thisDay<$endDay){
$class='当前日期';
}否则{
$class='';
}
}
回声$class。“\n”;

我不确定这是否更容易或更有效,但这不是一个坏方法。

因此,我发现,从丹麦工作日字符串生成日期时间相当复杂。从英语和格式到丹麦语要容易得多

所以我必须让它有点不同,把你们答案的一部分缝合在一起

<?php while ( have_rows('aabningstider_repeater', 'option') ) : the_row();
// vars
$day = get_sub_field('dag');
$timer = get_sub_field('aabne_timer');

$dayLower = strtolower($day);

$weekArray = array('mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag', 'søndag' );
$dayArray = preg_split('/[\s,-]+/', $dayLower);

$today = date('w') - 1;

$class = '';

if(is_array($dayArray)){

    $days = [];
    foreach ($dayArray as $daySingle ) {
        array_push($days, array_search($daySingle, $weekArray));
    }

    if($today > $days[0] && $today < $days[1]){     
        $class = ' current-day in-between-days';

    } elseif($today == $days[0] || $today == $days[1]){
        $class = ' current-day';

    } else{
        $class = '';
    }
} 

endwhile; ?>

我很确定这会一直有效,直到有一天我发现一个重大缺陷。在那之前就行了


非常感谢任何反馈或优化。感谢所有的投入

如果您有“星期一/星期二”和“星期三-星期五”格式的日期,请首先在变量$day_list='星期一/星期二'中分解这些日期,您是否可以显示正在处理的列表的真实示例$day\u数组=分解(“/”,$day\u列表);然后使用if(在数组中($date(“D”),$number\u list))$class='current day';请使用链接解释此代码的工作原理,不要只给出代码,因为解释更有可能帮助未来的读者。另见。对不起,我可能应该说明一下。所有这些都在一个while循环中,通过多个day字段循环。这是用来打印开放时间的。他们会加入:星期一、星期二、星期三等等。。。或者:星期一-星期四-星期五-星期六-星期天,以您的示例为例,day字段中的每个主题都会得到当前的day类,如果它包含一个工作日。这看起来是一个很好的解决方案。不幸的是,用户输入的是丹麦语,据我所知,将工作日的本地语言字符串转换为时间戳几乎是不可能的,除非您在每个工作日手动进行转换。我能够将您的方法转换为一个工作日数组,并使用array_search查找数组中的工作日位置。可能有点麻烦,但到目前为止还没有解决。
setlocale(LC_ALL, "danish");
$day = get_sub_field('dag'); // the field containing the user input day

$currentDayLower = strtolower(date("D"));
$dayLowercase = strtolower($day);

$class = '';

if($dayLowercase === $currentDayLower)
   $class = ' current-day';