0

そこで、営業日の計算を適切に処理するある種の PHP API を見つけようとして、Web をグーグルで検索してきました。stackoverflow で役立つ回答とコード スニペットをいくつか見つけましたが、特定の日付への営業日の追加を処理するコードには、必要な特定の機能 (週末にあたる休日の処理など) が欠けていて、それを行うのが困難でした。特定のアプリケーションのニーズに基づいてカスタマイズします。

それで、私は最終的に弾丸を噛んで独自の解決策を書くことにしました。私が作成したクラスには、stackoverflow ( James Pasta++ ) で見つけたコードと、昨年書いた同様の (そしてより単純な) Java クラスで使用されているロジックが組み込まれています。この概念について私が経験したのと同じフラストレーションに他の誰かが遭遇し、それが有用な解決策であると判断した場合に備えて、Q/A スタイルでここに投稿します。

私が取り組んだ 2 つの基本的な問題があります。1) 指定された日付に営業日を追加すること、および 2) 2 つの日付間の営業日をカウントすることです。これらの問題を解決する上での主な関心事は、使いやすさと拡張性でした。効率的に書かれていない場所がたくさんあります。問題が発生した場合は、コードの一部をリファクタリングできますが、少なくとも私の目的では、将来の数千営業日を計算することはありません:-)

サンプル コードとソースへのリンクは、以下の回答にあります。フィードバックと改善は大歓迎です。

4

1 に答える 1

0

コード

このライブラリの基本的な概念は、日付が BusinessDay オブジェクトでラップされるということです。次に、他の日付と比較するか、営業日を加算または減算することができます。ライブラリに提供されるすべての日付は、strtotime() で受け入れられる日付文字列、UNIX タイムスタンプ、別の BusinessDay オブジェクト、または null (現在の時刻を表す) の 4 つのタイプのいずれかになります。

BusinessDay オブジェクトは、new ステートメントまたは wrapBusinessDay() という関数によってインスタンス化できます。後者のオプションを使用すると、インスタンス化時にメソッド チェーンが可能になり、コードを簡潔に保つことができます。以下のサンプルコードを参照してください。

サンプルコード:

// add a business day to today
$ship_date = wrapBusinessDay(time())->add(1);

// find # of business days until required date
$required_date = '6/24/2013';
$difference = $ship_date->difference($required_date);

// panic?!
if ($difference < 10) {
    echo "Uh-oh, we'll need expedited shipping!\n";
} else {
    echo "Whew!  we're safe.\n";
}

// specify custom holidays
$arr_matey = wrapBusinessDay('2013-09-18', array(
    '2013-09-19'
))->add(1);

// specify custom formats
echo $arr_matey . "\n";                      // prints '2013-09-20 00:00:00'
echo $arr_matey->dateFormat('m~d~Y') . "\n"; // prints '09~20~2013'

ライブラリには他にもありますが、それがその要点です。これが他の誰かの時間を節約することを願っています! 〜ネイト

于 2013-06-09T03:13:32.403 に答える