안녕하세요 훌륭한 stackoverflow 커뮤니티입니다. 해결할 수없는 문제가 있습니다. X 개의 날짜 사이에 누락 된 날짜를 찾아야합니다. 감사합니다.
데이터베이스에서 데이터 가져 오기
$stmt=$db_con->prepare("SELECT date_from, date_to, country FROM work WHERE worker_id=xx");
while($row = $stmt->fetch()) { <br>
...
...
data = array("date_from" => $date_from, "date_to" => $date_to, "country" => $country);
}
내가 얻은 데이터는
15.01.2020 --- 20.01.2020 --- 국가 0
01.02.2020 --- 05.02.2020 --- 국가 1
10.02.2020 --- 20.02.2020 --- 국가 2
그 날짜는 노동자가 해외에서 일을 시작하고 끝낸 때를 의미합니다. 근로자가 본국에서 일하는시기를 알기 위해 날짜를 알아야합니다. 첫 번째 날짜 이전, 마지막 날짜 이후 및 그 사이의 날짜는 본국에서 일하는 것을 의미합니다. 내 최종 데이터는 다음과 같이 배열에 저장되어야합니다.
01.01.2020 --- 14.01.2020 --- 홈
15.01.2020 --- 20.01.2020 --- 국가 0
21.01.2020 --- 31.01.2020 --- 홈
01.02.2020 --- 05.02.2020- -국가 1
6.02.2020 --- 09.02.2020 --- 홈
10.02.2020 --- 20.02.2020 --- 국가 2
21.02.2020 --- 31.12.2020 --- 홈
나머지 배열이 올바르게 정렬되었으므로 예제의 2019가 오타라고 가정합니다.
여기에서 먼저 첫 번째 항목이 해당 월의 1 일 날짜인지 확인합니다. 그렇지 않은 경우 해당 월의 "시작"을 추가합니다.
그런 다음 루프에 들어가서 항목 사이에 간격이 있는지 확인하고 간격이 있으면 홈 항목을 추가합니다.
$arr = array ( 0 => array ( 'datum_od' => '01.01.2020', 'datum_do' => '10.01.2020', ), 1 => array ( 'datum_od' => '15.01.2020', 'datum_do' => '20.01.2020', ), 2 => array ( 'datum_od' => '01.02.2020', 'datum_do' => '05.02.2020', ), 3 => array ( 'datum_od' => '25.11.2020', 'datum_do' => '25.12.2020', ));
$end_date = 0;
if(date('d', strtotime($arr[0]['datum_od'])) != '01'){
$end_date = date('d.m.Y', strtotime($arr[0]['datum_od'] . ' -1 day'));
$new[] = array('datum_od' => date('01.m.Y', strtotime($arr[0]['datum_od'])), 'datum_do' => $end_date, 'home');
}
foreach($arr as $key => $item){
if(date("d.m.Y", strtotime($end_date . " +1 day")) != date('d.m.Y', strtotime($item['datum_od']))){
$end_date = date('d.m.Y', strtotime($item['datum_od'] . ' -1 day'));
$new[] = array('datum_od' => date('d.m.Y', strtotime($arr[$key-1]['datum_do'] . " +1 day")), 'datum_do' => $end_date, 'home');
$new[] = $item;
}else{
$new[] = $item;
}
}
var_dump($new);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다