date y
보다 먼저 n working days
이되도록 date x
을 찾아야합니다.PHP에서 다른 날짜 이전에 날짜를 찾으려면 어떻게합니까
나는 date("Y-m-d",$def_date." -5 days");
과 같은 것을 사용할 수 있지만 그 경우에는 주말이나 휴일을 고려하지 않을 것입니다. 월요일부터 토요일까지의 근무일을 가정 해 봅시다. 어떻게이 일을 할 수 있을지 생각해보십시오.
date y
보다 먼저 n working days
이되도록 date x
을 찾아야합니다.PHP에서 다른 날짜 이전에 날짜를 찾으려면 어떻게합니까
나는 date("Y-m-d",$def_date." -5 days");
과 같은 것을 사용할 수 있지만 그 경우에는 주말이나 휴일을 고려하지 않을 것입니다. 월요일부터 토요일까지의 근무일을 가정 해 봅시다. 어떻게이 일을 할 수 있을지 생각해보십시오.
감사에서 수정 시도,하지만 난 간단한 코드 작성이 특정 문제를 해결하기 위해 :
$sh_padding = 5; //No of working days to count backwards
$temp_sh_padding = 1; //A temporary holder
$end_stamp = strtotime(date("Y-m-d", strtotime($date_format)) . " -1 day"); //The date(timestamp) from which to count backwards
$start_stamp = $end_stamp; //start from same as end day
while($temp_sh_padding<$sh_padding)
{
$sh_day = date('w',$start_stamp);
if($sh_day==0){ //Skip if sunday
}
else
{
$temp_sh_padding++;
}
$start_stamp = strtotime(date("Y-m-d",$start_stamp)." -1 day");
}
$sh_st_dte = date("Y-m-d",$start_stamp); //The required start day
이
<?php
function businessdays($begin, $end) {
$rbegin = is_string($begin) ? strtotime(strval($begin)) : $begin;
$rend = is_string($end) ? strtotime(strval($end)) : $end;
if ($rbegin < 0 || $rend < 0)
return 0;
$begin = workday($rbegin, TRUE);
$end = workday($rend, FALSE);
if ($end < $begin) {
$end = $begin;
$begin = $end;
}
$difftime = $end - $begin;
$diffdays = floor($difftime/(24 * 60 * 60)) + 1;
if ($diffdays < 7) {
$abegin = getdate($rbegin);
$aend = getdate($rend);
if ($diffdays == 1 && ($astart['wday'] == 0 || $astart['wday'] == 6) && ($aend['wday'] == 0 || $aend['wday'] == 6))
return 0;
$abegin = getdate($begin);
$aend = getdate($end);
$weekends = ($aend['wday'] < $abegin['wday']) ? 1 : 0;
} else
$weekends = floor($diffdays/7);
return $diffdays - ($weekends * 2);
}
function workday($date, $begindate = TRUE) {
$adate = getdate($date);
$day = 24 * 60 * 60;
if ($adate['wday'] == 0) // Sunday
$date += $begindate ? $day : -($day * 2);
return $date;
}
$def_date="";//define your date here
$preDay='5 days';//no of previous days
date_sub($date, date_interval_create_from_date_string($preDay));
echo businessdays($date, $def_date); //date prior to another date
?>
가 도움들에 대한 PHP.net
덕분에, 그것을 시도해 보겠습니다. – Bluemagica
도움이되는지 알려주세요 :). 예인 경우 대답을 수락하십시오. – pckabeer
인터넷 검색의 빠른 비트 나를 this page으로 데려 왔는데 두 날짜 사이의 근무일 수를 계산하는 기능이 포함되어 있습니다.
필요에 맞게 개념을 조정하는 것이 매우 쉽습니다.
그러나 문제는 금요일에 월요일 인 "근무일"의 개념이 보편적이지 않다는 것입니다. 소프트웨어가 사내에서만 사용되는 경우 몇 가지 가정을하는 것이 좋지만 타사에서 사용하기위한 것이라면 해당 주와 동일한 근무일을 가질 것이라고 가정 할 수 없습니다.
또한 공휴일은 일년 내내 다양한 근무 주간의 임의의 날짜를 삭제하여 큰 스패너를 던질 것입니다.
당신이 이것을 처리하고 싶다면 달력의 일 (즉, 큰 배열)에 일년 중 날짜를 저장하고 작업 일 또는 비 활동 일로 개별적으로 표시하는 것이 현명한 방법입니다. 그리고 그렇게한다면 주말에도 같은 메커니즘을 사용할 수 있습니다.
물론 아래쪽면은 최신 상태로 유지해야합니다. 그러나 적어도 주말은 사소한 일일 것입니다 (사전에 일정을 반복하고 주말을 표시하는 경우 date('w')==0 or date('w')==6
).
또한보십시오 : http://stackoverflow.com/q/1828948/161052 – JYelton
나는 PHP에서, MySQL 아닙니다 – Bluemagica
아닙니다 이것을 할 필요가있다 : http://stackoverflow.com/q/4261179/161052 또는 http : //stackoverflow.com/q/4599755/161052. 이 주제에는 이미 많은 것이 있습니다. – JYelton