我正在构建一个脚本来检测某个日期是否是每年的周末。
第25和26天是银行假日,如果是周末,下一个工作日是银行假日的替代品,剩下的工作日是工作日。
例:如果二十五号是星期六,二十六号是星期天,那么二十七号和二十八号是银行假日,那么第二十九、三十、三十一天是工作日。
如果二十五号是星期日、二十六号和二十七号,那么是银行假日,第二十八、二十九、三十是工作日,三十一号是星期六。
以下是我的约会对象:
date('25-12-Y');
date('26-12-Y');
date('27-12-Y');
date('28-12-Y');
date('29-12-Y');
date('30-12-Y');
date('31-12-Y');我创建的代码如下:(请注意,$getyear变量是用来测试不同年份的)
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
}
$getyear = 2013;
echo '25 ';
if (isWeekend(date('25-12-'.$getyear))){
echo 'weekend';
} else {
echo 'bh';
};
echo '<br>';
echo '26 ';
if (isWeekend(date('26-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'bh';
};
echo '<br>';
echo '27 ';
if (isWeekend(date('27-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'leave';
};
echo '<br>';
echo '28 ';
if (isWeekend(date('28-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'leave';
};
echo '<br>';
echo '29 ';
if (isWeekend(date('29-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'leave';
};
echo '<br>';
echo '30 ';
if (isWeekend(date('30-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'leave';
};
echo '<br>';
echo '31 ';
if (isWeekend(date('31-12-'.$getyear ))){
echo 'weekend';
} else {
echo 'leave';
};
echo '<br>';我知道这可能不是最佳实践,所以我正在寻找另一种方法来解决这个问题。
发布于 2013-11-14 11:42:17
$dates = array();
$christmas_days = array(25, 26);
$year = 2013;
for ($day = 25; $day <= 31; $day++)
{
$dates[$day] = date($day . '-12-' . $year);
}
foreach ($dates as $day => $date)
{
echo $day . ' ';
if (isWeekend($date))
{
echo 'weekend';
if (in_array($day, $christmas_days))
{
$bh_on_weekend++;
}
}
else
{
if ($bh_on_weekend > 0)
{
echo 'bh';
$bh_on_weekend--;
}
else
{
if (in_array($day, $christmas_days))
{
echo 'bh';
}
else
{
echo 'leave';
}
}
}
echo '<br>';
}
function isWeekend($date)
{
return (date('N', strtotime($date)) >= 6);
}试着在干的路上尽量少重复。日期的创建更有活力。希望它能帮助你,或者给你一个如何让它与众不同的想法。
2021年产出
25 weekend
26 weekend
27 bh
28 bh
29 leave
30 leave
31 leave发布于 2013-11-14 12:03:49
您应该使用碳抽象所有这些逻辑。
然后你可以:
$dt = Carbon::create(2013, 12, 25);
$dt->isWeekday(); // bool碳文档真的很好,所以我相信你能找到你想要的东西。
发布于 2019-11-25 20:31:35
这个问题和答案现在已经很古老了,但我今天遇到了这个问题,并提出了以下功能:
if (!function_exists('hasWeekend')) {
function hasWeekend (\DateTime $dateOne, \DateTime $dateTwo, $weekendDays = ["6", "7"]) {
$diff = $dateTwo->diff($dateOne)->format('%a');
$weekend = false;
while ($diff > 0) {
$date = $dateTwo->sub(new \DateInterval('P1D'));
$day = $date->format('N');
if (in_array($day, $weekendDays)) {
$weekend = true;
break;
}
$diff--;
}
return $weekend;
}
}像这样使用它:
$hasWeekend = hasWeekend(new \DateTime('2019-11-25'), new \DateTime('2019-11-26'));
// $hasWeekend = false, Nov 25th is a Monday, Nov 26nd a Tuesday.
$hasWeekend = hasWeekend(new \DateTime('2019-11-27'), new \DateTime('2019-12-2'));
// $hasWeekend = true, December 2nd 2019 is a monday如果由于任何原因,周末不是星期六和星期日,则可以更改$weekendDays数组以表示不同的日期。
https://stackoverflow.com/questions/19976216
复制相似问题