001.
<!DOCTYPE html>
002.
<html>
003.
<head>
004.
<title>Demo : OT Generator</title>
005.
<style>
006.
.holiday{
007.
background-color: #ffcccc
008.
}
009.
</style>
010.
</head>
011.
<body>
012.
013.
<h2>Demo : OT Generator by DevPSK</h2>
014.
015.
<?php
016.
$employee
=
array
(
017.
array
(
'name'
=>
'mo'
,
'surname'
=>
''
,
'workday'
=> 3,
'holiday'
=> 2,
'fixworkday'
=>
array
(4, 8, 25),
'fixholiday'
=>
array
(7, 14)),
018.
array
(
'name'
=>
'mid'
,
'surname'
=>
''
,
'workday'
=> 3,
'holiday'
=> 2,
'fixworkday'
=>
array
(2, 10, 24),
'fixholiday'
=> 0),
019.
array
(
'name'
=>
'jame'
,
'surname'
=>
''
,
'workday'
=> 3,
'holiday'
=> 2,
'fixworkday'
=> 0,
'fixholiday'
=>
array
(13, 6)),
020.
array
(
'name'
=>
'kong'
,
'surname'
=>
''
,
'workday'
=> 3,
'holiday'
=> 2,
'fixworkday'
=>
array
(1),
'fixholiday'
=>
array
(27, 28)),
021.
);
022.
023.
$strStartDate
=
'2019-07-01'
;
024.
$strEndDate
=
'2019-07-31'
;
025.
026.
$intWorkDay
= 0;
027.
$intHoliday
= 0;
028.
029.
$intTotalDay
= ((
strtotime
(
$strEndDate
) -
strtotime
(
$strStartDate
)) / ( 60 * 60 * 24 )) + 1;
030.
while
(
strtotime
(
$strStartDate
) <=
strtotime
(
$strEndDate
)) {
031.
$DayOfWeek
=
date
(
"w"
,
strtotime
(
$strStartDate
));
032.
if
(
$DayOfWeek
== 0
or
$DayOfWeek
== 6) {
033.
$intHoliday
++;
034.
$keepHoliday
[] =
$strStartDate
;
035.
036.
}
else
{
037.
$intWorkDay
++;
038.
$keepWorkday
[] =
$strStartDate
;
039.
040.
}
041.
042.
$strStartDate
=
date
(
"Y-m-d"
,
strtotime
(
"+1 day"
,
strtotime
(
$strStartDate
)));
043.
}
044.
045.
echo
"<hr>"
;
046.
echo
"Total Day = $intTotalDay"
;
047.
echo
"<br>Work Day = $intWorkDay"
;
048.
049.
echo
"<br>Holiday = $intHoliday"
;
050.
051.
echo
"<hr>"
;
052.
053.
$highlight
=
$keepHoliday
;
054.
055.
foreach
(
$employee
as
$key
=>
$value
) {
056.
if
(
$value
[
'holiday'
] > 0) {
057.
if
(
$value
[
'fixholiday'
] > 0 &&
count
(
$value
[
'fixholiday'
]) <=
$value
[
'holiday'
]) {
058.
foreach
(
$value
[
'fixholiday'
]
as
$key5
=>
$value5
) {
059.
foreach
(
$keepHoliday
as
$key6
=>
$value6
) {
060.
if
(sprintf(
"%02d"
,
$value5
) ==
date
(
"d"
,
strtotime
(
$value6
))) {
061.
$getDate
[
$value
[
'name'
]][] =
$value6
;
062.
unset(
$keepHoliday
[
$key6
]);
063.
}
064.
}
065.
}
066.
}
067.
}
068.
if
(
$value
[
'workday'
] > 0) {
069.
if
(
$value
[
'fixworkday'
] > 0 &&
count
(
$value
[
'fixworkday'
]) <=
$value
[
'workday'
]) {
070.
foreach
(
$value
[
'fixworkday'
]
as
$key5
=>
$value5
) {
071.
foreach
(
$keepWorkday
as
$key6
=>
$value6
) {
072.
if
(sprintf(
"%02d"
,
$value5
) ==
date
(
"d"
,
strtotime
(
$value6
))) {
073.
$getDate
[
$value
[
'name'
]][] =
$value6
;
074.
unset(
$keepWorkday
[
$key6
]);
075.
}
076.
}
077.
}
078.
}
079.
}
080.
}
081.
082.
foreach
(
$employee
as
$key
=>
$value
) {
083.
if
(
$value
[
'holiday'
] > 0) {
084.
if
(
$value
[
'fixholiday'
] > 0 &&
count
(
$value
[
'fixholiday'
]) <=
$value
[
'holiday'
]) {
085.
$calRandHoliday
=
$value
[
'holiday'
] -
count
(
$value
[
'fixholiday'
]);
086.
if
(
$calRandHoliday
> 0) {
087.
$random_keyHoliday
[
$value
[
'name'
]] =
array_rand
(
$keepHoliday
,
$calRandHoliday
);
088.
foreach
(
$random_keyHoliday
as
$key2
=>
$value2
) {
089.
if
(
$key2
==
$value
[
'name'
]) {
090.
foreach
(
$value2
as
$key3
=>
$value3
) {
091.
foreach
(
$keepHoliday
as
$key4
=>
$value4
) {
092.
if
(
$value3
==
$key4
) {
093.
$getDate
[
$value
[
'name'
]][] =
$value4
;
094.
unset(
$keepHoliday
[
$key4
]);
095.
}
096.
}
097.
}
098.
}
099.
}
100.
}
101.
}
else
{
102.
$random_keyHoliday
[
$value
[
'name'
]] =
array_rand
(
$keepHoliday
,
$value
[
'holiday'
]);
103.
foreach
(
$random_keyHoliday
as
$key2
=>
$value2
) {
104.
if
(
$key2
==
$value
[
'name'
]) {
105.
foreach
(
$value2
as
$key3
=>
$value3
) {
106.
foreach
(
$keepHoliday
as
$key4
=>
$value4
) {
107.
if
(
$value3
==
$key4
) {
108.
$getDate
[
$value
[
'name'
]][] =
$value4
;
109.
unset(
$keepHoliday
[
$key4
]);
110.
}
111.
}
112.
}
113.
}
114.
}
115.
}
116.
}
117.
if
(
$value
[
'workday'
] > 0) {
118.
if
(
$value
[
'fixworkday'
] > 0 &&
count
(
$value
[
'fixworkday'
]) <=
$value
[
'workday'
]) {
119.
$calRandWorkday
=
$value
[
'workday'
] -
count
(
$value
[
'fixworkday'
]);
120.
if
(
$calRandWorkday
> 0) {
121.
$random_keyWorkday
[
$value
[
'name'
]] =
array_rand
(
$keepWorkday
,
$calRandWorkday
);
122.
foreach
(
$random_keyWorkday
as
$key2
=>
$value2
) {
123.
if
(
$key2
==
$value
[
'name'
]) {
124.
foreach
(
$value2
as
$key3
=>
$value3
) {
125.
foreach
(
$keepWorkday
as
$key4
=>
$value4
) {
126.
if
(
$value3
==
$key4
) {
127.
$getDate
[
$value
[
'name'
]][] =
$value4
;
128.
unset(
$keepWorkday
[
$key4
]);
129.
}
130.
}
131.
}
132.
}
133.
}
134.
}
135.
}
else
{
136.
$random_keyWorkday
[
$value
[
'name'
]] =
array_rand
(
$keepWorkday
,
$value
[
'workday'
]);
137.
foreach
(
$random_keyWorkday
as
$key2
=>
$value2
) {
138.
if
(
$key2
==
$value
[
'name'
]) {
139.
foreach
(
$value2
as
$key3
=>
$value3
) {
140.
foreach
(
$keepWorkday
as
$key4
=>
$value4
) {
141.
if
(
$value3
==
$key4
) {
142.
$getDate
[
$value
[
'name'
]][] =
$value4
;
143.
unset(
$keepWorkday
[
$key4
]);
144.
}
145.
}
146.
}
147.
}
148.
}
149.
}
150.
}
151.
}
152.
153.
154.
155.
156.
157.
echo
"<hr>"
;
158.
159.
echo
'<table border="1">'
;
160.
echo
'<thead>'
;
161.
echo
'<tr>'
;
162.
echo
'<th>employee</th>'
;
163.
$i
= 1;
164.
while
(
$i
<=
$intTotalDay
) {
165.
$showclass
=
''
;
166.
foreach
(
$highlight
as
$key2
=>
$value2
) {
167.
if
(sprintf(
"%02d"
,
$i
) ==
date
(
"d"
,
strtotime
(
$value2
))) {
168.
$showclass
=
'class="holiday"'
;
169.
}
170.
}
171.
echo
'<th '
.
$showclass
.
'>'
. sprintf(
"%'02d"
,
$i
) . '</th>';
172.
$i
++;
173.
}
174.
echo
'</tr>'
;
175.
echo
'</thead>'
;
176.
echo
'<tbody>'
;
177.
foreach
(
$getDate
as
$key
=>
$value
) {
178.
echo
'<tr>'
;
179.
echo
'<td>'
.
$key
.
'</td>'
;
180.
$i2
= 1;
181.
while
(
$i2
<=
$intTotalDay
) {
182.
$showclass2
=
''
;
183.
foreach
(
$highlight
as
$key3
=>
$value3
) {
184.
if
(sprintf(
"%02d"
,
$i2
) ==
date
(
"d"
,
strtotime
(
$value3
))) {
185.
$showclass2
=
'class="holiday"'
;
186.
}
187.
}
188.
$show
=
''
;
189.
foreach
(
$value
as
$key2
=>
$value2
) {
190.
if
(sprintf(
"%02d"
,
$i2
) ==
date
(
"d"
,
strtotime
(
$value2
))) {
191.
$show
=
'x'
;
192.
}
193.
}
194.
echo
'<td '
.
$showclass2
.
'>'
.
$show
.
'</td>'
;
195.
$i2
++;
196.
}
197.
echo
'</tr>'
;
198.
}
199.
echo
'</tbody>'
;
200.
echo
'</table>'
;
201.
202.
echo
"<hr>"
;
203.
204.
echo
'<table border="1">'
;
205.
echo
'<thead>'
;
206.
echo
'<tr>'
;
207.
echo
'<th>employee</th>'
;
208.
$i
= 1;
209.
while
(
$i
<=
$intTotalDay
) {
210.
$showclass
=
''
;
211.
foreach
(
$highlight
as
$key2
=>
$value2
) {
212.
if
(sprintf(
"%02d"
,
$i
) ==
date
(
"d"
,
strtotime
(
$value2
))) {
213.
$showclass
=
'class="holiday"'
;
214.
}
215.
}
216.
echo
'<th '
.
$showclass
.
'>'
. sprintf(
"%'02d"
,
$i
) . '</th>';
217.
$i
++;
218.
}
219.
echo
'</tr>'
;
220.
echo
'</thead>'
;
221.
echo
'<tbody>'
;
222.
echo
'<tr>'
;
223.
echo
'<td>no select</td>'
;
224.
$i2
= 1;
225.
while
(
$i2
<=
$intTotalDay
) {
226.
$showclass2
=
''
;
227.
foreach
(
$highlight
as
$key3
=>
$value3
) {
228.
if
(sprintf(
"%02d"
,
$i2
) ==
date
(
"d"
,
strtotime
(
$value3
))) {
229.
$showclass2
=
'class="holiday"'
;
230.
}
231.
}
232.
$show
=
''
;
233.
foreach
(
$keepWorkday
as
$key
=>
$value
) {
234.
if
(sprintf(
"%02d"
,
$i2
) ==
date
(
"d"
,
strtotime
(
$value
))) {
235.
$show
=
'x'
;
236.
}
237.
}
238.
echo
'<td '
.
$showclass2
.
'>'
.
$show
.
'</td>'
;
239.
$i2
++;
240.
}
241.
echo
'</tr>'
;
242.
echo
'</tbody>'
;
243.
echo
'</table>'
;
244.
245.
echo
"<hr>"
;
246.
247.
$query_date
=
'2019-07-01'
;
248.
249.
echo
date
(
'Y-m-01'
,
strtotime
(
$query_date
));
250.
echo
' - '
;
251.
252.
echo
date
(
'Y-m-t'
,
strtotime
(
$query_date
));
253.
254.
echo
"<hr>"
;
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
?>
265.
266.
267.
<div>ref. https:
268.
<div>credit. https:
269.
<div>by. devpsk.com</div>
270.
</body>
271.
</html>