[英]Using Date() to calculate three working days ago?
我希望在三个工作日前获得一个PHP日期。
我找到了很多通过各种文本方法获取日期的例子,但我找到的最接近的是这一个 ,但它返回三个日期(不是一个日期,三天前)并且需要一个get_holidays函数,代码不是提供。
如何在今天之前的三个工作日内编写PHP代码?
这有效,但不考虑周/周末日:
date('Y-m-d', strtotime('-3 days')); // returns 2012-12-01
这不起作用,但我希望看到:
date('Y-m-d', strtotime('four week days ago'));
事实上,上述回报'1969-12-31'。 就像这样: strtotime('-4 week days')
。
你可以继续回去一天,直到你得到你想要的。 我不确定这是最有效的方法,但它完成了工作:
$count = 0
$day = strtotime('-1 day');
while ($count < 3 || date('N', $day) > 5) {
$count++;
$day = strtotime('-1 day', $day);
}
最终答复:
对于像我这样的新手,这是使用Explosion Pills答案的工作代码:
function working_days_ago($days) {
$count = 0;
$day = strtotime('-1 day');
while ($count < $days || date('N', $day) > 5) {
$count++;
$day = strtotime('-1 day', $day);
}
return date('Y-m-d', $day);
}
$three_days_ago = working_days_ago('3');
奇迹般有效 !
我从上面的函数中得到了一些意想不到的结果,所以我写了这个。 参数是天数,前进(1)或后退(0)以及日期。 如果今天没有提供日期,将使用以下日期:
// returned $date Y/m/d
function work_days_from_date($days, $forward, $date=NULL)
{
if(!$date)
{
$date = date('Y-m-d'); // if no date given, use todays date
}
while ($days != 0)
{
$forward == 1 ? $day = strtotime($date.' +1 day') : $day = strtotime($date.' -1 day');
$date = date('Y-m-d',$day);
if( date('N', strtotime($date)) <= 5) // if it's a weekday
{
$days--;
}
}
return $date;
}
3天前从今天开始:
$date = new DateTime();
$date->sub(new DateInterval('P3D'));
echo $date->format('Y-m-d') . "\n";
3天前从特定日期:
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P3D'));
echo $date->format('Y-m-d') . "\n";
得到功能后的一天↓
function working_days($days){
$day = strtotime(date('Y-m-d'));
for ($x=0;$x<$days;$x++) {
$day = strtotime('+1 day', $day);
if (date('N', $day) > 6) {
$x = $x - 1;
}
}
return date('Y-m-d',$day);
}
print_r( working_days(25));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.