特定の月と年の平日の日数を計算したい。平日とは、月曜日から金曜日までを意味します。どうすればいいのですか ?
9482 次
13 に答える
26
月の毎日を数える必要はありません。何があっても、最初の 28 日間には 20 の平日が含まれることは既にご存じでしょう。あなたがしなければならないのは、過去数日を決定することだけです。開始値を 29 に変更します。次に、戻り値に 20 平日を追加します。
function get_weekdays($m,$y) {
$lastday = date("t",mktime(0,0,0,$m,1,$y));
$weekdays=0;
for($d=29;$d<=$lastday;$d++) {
$wd = date("w",mktime(0,0,0,$m,$d,$y));
if($wd > 0 && $wd < 6) $weekdays++;
}
return $weekdays+20;
}
于 2012-10-15T20:59:13.207 に答える
2
いくつかの基本的なコード:
$month = 12;
$weekdays = array();
$d = 1;
do {
$mk = mktime(0, 0, 0, $month, $d, date("Y"));
@$weekdays[date("w", $mk)]++;
$d++;
} while (date("m", $mk) == $month);
print_r($weekdays);
@
PHP エラー警告に通知が表示されない場合は削除してください。
于 2011-12-06T11:27:28.853 に答える
2
これを試してください
function getWeekdays($m, $y = NULL){
$arrDtext = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri');
if(is_null($y) || (!is_null($y) && $y == ''))
$y = date('Y');
$d = 1;
$timestamp = mktime(0,0,0,$m,$d,$y);
$lastDate = date('t', $timestamp);
$workingDays = 0;
for($i=$d; $i<=$lastDate; $i++){
if(in_array(date('D', mktime(0,0,0,$m,$i,$y)), $arrDtext)){
$workingDays++;
}
}
return $workingDays;
}
于 2011-12-06T16:37:50.953 に答える
1
これは私が思いついた最も単純なコードです。実際には、休日を保持する配列またはデータベース テーブルを作成して、実際の「稼働日」のカウントを取得する必要がありますが、それは求められたものではありませんでした。
function get_weekdays($m,$y) {
$lastday = date("t",mktime(0,0,0,$m,1,$y));
$weekdays=0;
for($d=1;$d<=$lastday;$d++) {
$wd = date("w",mktime(0,0,0,$m,$d,$y));
if($wd > 0 && $wd < 6) $weekdays++;
}
return $weekdays;
}
于 2012-02-08T15:54:12.747 に答える
1
2 つの日付間の休日なしの稼働日数を取得します。
使用例:
echo number_of_working_days('2013-12-23', '2013-12-29');
出力:
3
于 2013-09-21T10:04:32.663 に答える
0
特定の月の最後の日と平日を見つけて、次の
ような単純な while ループを実行します。
$dates = explode(',', date('t,N', strtotime('2013-11-01')));
$day = $dates[1];
$tot = $dates[0];
$cnt = 0;
while ($tot>1)
{
if ($day < 6)
{
$cnt++;
}
if ($day == 1)
{
$day = 7;
}
else
{
$day--;
}
$tot--;
}
$cnt = 特定の月の平日 (月曜日から金曜日) の合計
于 2011-12-06T16:49:32.290 に答える
0
$first_day_of_month (日曜日/月曜日などの曜日) を取る単純な関数を作成しました。次のようにして、月の初日を確認できます。
date('N', strtotime(date("01-m-Y")));
そして、次のように調達できる $month_last_date を使用します。
date("t");
関数は次のとおりです。
function workingDaysInMonth(int $first_day_of_month, int $month_last_date) : array
{
$working_days = [];
$day = $first_day_of_month;
$working_day_count = 0;
for ($i = 1; $i <= $month_last_date; $i++) {
if ($day == 8) {
$day = 1;
}
if (!($day == 6 || $day == 7)) {
$working_day_count++;
$working_days[$i] = $working_day_count;
}
$day++;
}
return $working_days;
}
于 2021-04-26T17:25:06.947 に答える
0
これらの関数はループなしで機能します。
関数は、以下を使用して平日の数を計算します。
- 月の最初の月曜日の日番号
- 月の日数
// main functions
// weekdays in month of year
function calculateNumberOfWeekDaysAtDate($month, $year)
{
// I'm sorry, I don't know the right format for the $month and $year, I hope this is right.
// PLEASE CORRECT IF WRONG
$firstMondayInCurrentMonth = (int) date("j", strtotime("first monday of 01-$month-$year")); //get first monday in month for calculations
$numberOfDaysOfCurrentMonth = (int) date("t", strtotime("01-$month-$year")); // number of days in month
return calculateNumberOfWeekDaysFromFirstMondayAndNumberOfMonthDays($firstMondayInCurrentMonth, $numberOfDaysOfCurrentMonth);
}
// week days in current month
function calculateNumberOfWeekDaysInCurrentMonth()
{
$firstMondayInCurrentMonth = (int) date("j", strtotime("first monday of this month")); //get first monday in month for calculations
$numberOfDaysOfCurrentMonth = (int) date("t"); // number of days in this month
return calculateNumberOfWeekDaysFromFirstMondayAndNumberOfMonthDays($firstMondayInCurrentMonth, $numberOfDaysOfCurrentMonth);
}
// helper functions
function calculateNumberOfWeekDaysFromFirstMondayAndNumberOfMonthDays($firstMondayInCurrentMonth, $numberOfDaysOfCurrentMonth)
{
return $numberOfWeekDays = (($start = ($firstMondayInCurrentMonth - 3)) < 0 ? 0 : $start) + floor(($numberOfDaysOfCurrentMonth - ($firstMondayInCurrentMonth - 1)) / 7) * 5 + (($rest = (($numberOfDaysOfCurrentMonth - ($firstMondayInCurrentMonth - 1)) % 7)) <= 5 ? $rest : 5);
}
于 2018-04-11T14:51:53.423 に答える