どなたか、任意の日付xから、n営業日前の日付yを簡単に求めるスクリプトご存知じゃないですか?

モジュールでも結構です。
Time:Localもつかって結構です。

休日は土・日で、祭日は無視して結構です。
アルゴリズムだけでも結構です。

金曜日から5営業日前だったら金曜ですが、3営業日前だと火曜日ですよね。
また数十日前となると、7で割って、それに2掛けて日数を足してそれを金曜日の日付からひいて。。。。と悩んでると、片頭痛が再発しそうです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問文にある変数、x, n, y を、それぞれ変数 $x, $n, $y として使用します。


また、$x, $y は、シリアル秒とします。

$w = (localtime($x))[6];
if ($n >= $w) {
  $s = int(($n - $w) / 5) + 1;
  $n += $s * 2;
}
$y = $x - $n * (60*60*24);

(多分)これで求まると思います。

■考え方
・n 営業日前、というのが、1回も土日をまたがなければ、$x から $n 日分のシリアル秒を引けばOKです。
・1回でも土日をまたぐのであれば、前週の金曜日まで(営業日で)戻り、そこから(週5日で)何週分あるかを求めます($s)。その週数に土日の日数(2)をかけた値を $n に足せば、土日を含めて何日前かが求まります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
すごいです。

考え方を読むと、ごもっとも、かつシンプル。
ほんとにありがとうございます
いただきます。

お礼日時:2002/03/22 01:17

演習問題のつもりで挑戦した初心者回答の失礼をご容赦ください。


実行未確認の「力ずく」ですが・・・

$theday = timelocal(0, 0, 0, dd, mm-1, yyyy); #日付 x のシリアル秒
$i = 0; #経過営業日を0からスタート
while ($i < $n) { #経過営業日が n に達したら抜ける
$theday = $theday - 24*60*60; #1日前のシリアル秒
$wday = (localtime($theday))[6]; #その曜日を求めて
if (($wday != 0) && ($wday != 6)) { #土日でなければ
++$i;} #経過営業日を加算して
} #戻る
$y = localtime($theday); #経過営業日数が n に達した日付を得る
    • good
    • 0
この回答へのお礼

早速ありがとうございます。

そうなんですよね。
ループの度にlocaltimeを呼び出すのがヤで最後の手段にとは思ってるんですが、案外他に手は無いのかも知れないですね。

日付の計算ってほんとややこしいですよね。

お礼日時:2002/03/20 02:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q東京ディズニーランドで配布される記念日などのピンについての質問です。

東京ディズニーランドで配布される記念日などのピンについての質問です。
今までその日に行ったことがないのですが、配布される日というのはあらかじめ分かるものなのでしょうか?

また最近も配布はされているのでしょうか?
11月18日のミッキーの誕生日に配布されたりしますか?

その日はやっぱり混雑しますか?

色々質問ぃて申し訳ないのですが、よろしくお願いします。

Aベストアンサー

25周年を最後に、正式?な配布はしていませんが…

去年だったっけ?TDSのキャンドルライトリフレクションズが終わるときに、サイリウム(折ると光る棒)を配りました。
でもこれは告知ナシで、どちらかというとCMの撮影用のためという感じでした。
ミッキーの誕生日と、キャンドルの最終日に配ったと記憶してます…

あとは、カウントダウンのときは毎年配布というか、記念品がつきます。

確か10周年から4/15のみ告知ナシで配布がはじまりました。
(それ以前は、5年おきの○周年というときにスクラッチとかはあった)
ミレニアムカウントダウンあたりから、開園記念日以外の日に配布をするようになり、公式HPでも告知がされるようになりましたが、25周年を最後に(しかも確か24個という半端な数で)配布は終了しました。
それ以降、HPで事前に告知されるような配布はしていないと思います。
事前告知があったときの配布日はかなり混雑しますよ。
10~14周年の、4/15のみ配布のころは、4/15に行けばふるい常連にばったり会う…なんてぐらいでした。
ただ25周年までの近年は配布も頻繁でしたので、配布初期のころと比べると分散していたように思います。

今年に関しては、公式では告知はないと思います。
最近は情報あまり入ってこないのですが、とりあえず11/18に配布があるかどうかは今のところ耳にはしていません。
ただ去年はかなりぎりぎりに知ったので、ないとも言い切れないですが。

25周年を最後に、正式?な配布はしていませんが…

去年だったっけ?TDSのキャンドルライトリフレクションズが終わるときに、サイリウム(折ると光る棒)を配りました。
でもこれは告知ナシで、どちらかというとCMの撮影用のためという感じでした。
ミッキーの誕生日と、キャンドルの最終日に配ったと記憶してます…

あとは、カウントダウンのときは毎年配布というか、記念品がつきます。

確か10周年から4/15のみ告知ナシで配布がはじまりました。
(それ以前は、5年おきの○周年というときにスクラッチとかはあっ...続きを読む

Qperlで今日の日付から、今月の1日から月末迄の連続した日付を出カしたいがどうすれば?

perlで今日の日付から、今月の1日から月末迄の連続した日付を出カしたい。その方法がわからない。
例えば、今日の日付が2016年2月17日と仮定して、その日付から年が
2016年。月が2月と分かる。その数値を使って、2016年2月の最終日を求
める。この場合は、29日。

それで、2016年2月1日から、2016年2月29日迄の連続した日付を出カし
たい。但し、フォーマットは、2016-02-29の形式で出カしたい。

perlのソースを提示願います。環境は、windows7のactive perlを使っています。
宜しく、お願いします。

Aベストアンサー

うぅ~ん, どこで困っているんだろう....

1. 「今日の日付」を求める
2. 「今月の日数」を求める
3. 「連続した日付」を出力する
でできるはずだよなぁ....

QQ.手首付近の局部麻酔について 僕はあと2日したら局部麻酔で手首のピンを抜釘します。でも、局部麻

Q.手首付近の局部麻酔について


僕はあと2日したら局部麻酔で手首のピンを抜釘します。でも、局部麻酔が不安で仕方ありません、本題ですが、局部麻酔は、注射されてから何秒くらいで感覚が無くなるのでしょうか(効果が出てくるのでしょうか。)

Aベストアンサー

5秒から10秒くらいですかね?

麻酔ですからまったく痛みは感じません。

痛みを感じていたら麻酔の意味がありませんからね。

Q日付を入力すると曜日が返ってくるプログラム

タイトルのどうり、日付を入力すると曜日が返ってくるperlを作りたいのですが、なかなか良いアイデアが出てきません。
どなたか知恵をお貸し下さい。

具体例としては
$a =&Youbi($year,$month,$day);
とすると$aに"金"とか"月"といった値が返ってくるような感じでやりたいです。

お願いします。

Aベストアンサー

参考URLのページがまさにそれです。
他にもたくさんのTipsがあり、とても勉強になります。

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#Date2WDay

Q日焼け止め、ピンからキリまで☆

日焼け止めの、価格は、ピンからキリまでありますが、
効能に違いはあるのでしょうか?

伸びがいい、落ちにくい、などの理由でしょうか?

やっぱり、高いのは焼けない!
やっぱり、安いのは焼けてしまった!

の経験談など、ございましたら、お願いします。m(..)m

Aベストアンサー

日焼け防止効果はSPF値が高いほどまたPA値の+が多いほど日焼けしにくいです。
SPF 120、 PA+++は白浮きします。
SPF 50、PA+++などなら塗ったかどうかわからないものもあります。また塗った感じがさらっとしていて長く安定しているものが値段が高いように感じられます。

●使う基油の違い
 べたべた感・さらさら感・汗でおちやすさ
 長く皮膚に安定しているかなど。
●使う反射材の違い
 紫外線収集剤や反射材などの材料が金属アレルギーを起しにくい材料か又は匂わない材料かで変わります。安いものは鉱物、アルミなどですが高いものはパール粉末や酸化チタン、酸化亜鉛などを使用します。
●見た目の感じ
 白浮きしないかどうかの感じ

参考URL:http://nayami.spaspa.jp/suncare.html

Q第1月曜日は第1週の月曜日かその月の最初の月曜日か

皆さんに一般論的、社会通念的なところもからめて伺いたいのですが,第1月曜日、第2月曜日といった言葉の「第1、第2」というのは、
「カレンダー上の第1週の月曜日」でしょうか、
それとも「その月の最初の月曜日」なんでしょうか?


今月4月はキレイに日曜頭の1日始まりで誰の目にも4月2日が第1月曜日ですが、翌5月をみると、火曜日1日はじまりです。こういった場合、第1月曜日は「5月7日」であると考える人はいないのでしょうか?
理美容関係の業種等、「その月の最初の月曜日」を「第1月曜日」としてないかなぁと・・・。

Aベストアンサー

↓は、とある美容室の定休日ですが、

http://ameblo.jp/chic-g/entry-10029580890.html
>※ もしその月の第一火曜が1日にあたる場合は
第一月曜が7日となるため
その月の第一月・火曜は7日・8日
となりますのでご注意ください

という但し書きがあります。

通常考えれば、カレンダー通りの解釈になるのではないでしょうか。

Q「取引債務の弁済期日から90日」についてピンと来る方いますか?

売買契約にかかる債務は、債務履行しないまま弁済期日から90日経過すると、「何かが起こる」ような感じがするのですが、これについて何かご存知の方は是非教えてください!法律に書いてある場合は、法律名もお教えいただけますと助かります。

Aベストアンサー

補足があって初めて分かりました。

○銀行の不良債権で、3ヶ月以上延滞している債権を要管理債権に分類しているようなのですが

これは、金融再生法(金融機能の再生のための緊急措置に関する法律)およびその施行規則において、金融機関が開示すべき債権の種類として「要管理債権」を定め、その基準に「3ヶ月以上延滞している」というのがあるからです。銀行法でも3ヶ月延滞という基準による開示義務があります。

http://www.zenginkyo.or.jp/pub/pamph/pdf/dp2_1.pdf

これらの債権については金融機関の開示義務が生じるというだけで、もとの債権自体には何らの変化も生じません。

売買契約だから、というものでもないですね。

Q指定した日付から曜日を求める。

localtimeを使うと今現在の曜日や時間、日付がわかりますよね?
そうではなく、たとえば、2003/09/12という指定をしたときに、金曜と返ってくるようにするにはどのようにしたらいいのでしょうか?

Aベストアンサー

こちらのサイトを参考にしてみては如何でしょうか?
年月日の要素入力はご自身のプログラムにあわせてください。

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#Date2WDay

Q彼氏がバイトでネクタイを締めていて、ネクタイピンが欲しいと言っていたそうなのでネクタイピンを買いまし

彼氏がバイトでネクタイを締めていて、ネクタイピンが欲しいと言っていたそうなのでネクタイピンを買いました。
これを何でもない日に渡すのか、2ヶ月記念日の飲みの時に渡すのか迷ってます。

どちらがいいと思いますか??
どちらが嬉しいでしょうか?
何でもない日のプレゼントもいいなと思ったのですが…

Aベストアンサー

2ヶ月記念日がどのくらい先なのか知りませんが、2週間以上先ならば私は先に渡します。ネクタイピンを贈るときの意味をネットで知って贈ってあげたらよりすてきなプレゼントになると思います。

Q定休日の判定:第2第3水曜日を判定するには?

入力された日時が定休日であるかを判定するルーチンを考えています。
毎週水曜定休だけであれば曜日判定だけですむのですが、定休日が「第2第3水曜日」という場合、どういった処理をすればよいでしょうか?

当月の定休日データを毎月「5/10/15」のように数値データとし更新してやれば、当月に関してはOKですが、来月の日時を入力された場合これでは営業日であっても定休日と判定してしまいます。

Aベストアンサー

#1です。判定ルーチンのコード例です。
-----------------------------------
# 第2,3水曜日判定ルーチン
use Time::Local;
sub hantei
{
# 入力パラメータは P1,P2,P3
# P1:年(2000~)
# P2:月(1~12)
# P3:日(1~31)
my $nen = shift(@_);
my $tuki = shift(@_);
my $hi = shift(@_);
my $mday = $hi;
my $mon = $tuki - 1;
my $year = $nen - 1900;
# 曜日を求める為に timelocal->locatimeの変換を行う
my $ltime=timelocal(0,0,0,$mday,$mon,$year);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
= localtime($ltime);
# $wday が曜日(0~6=>日~土)(従って水曜日は$wday=3)
#水曜日でないなら
if ($wday != 3){
return 0;
}
#水曜日なら
# 1-7は第1週,8-13は第2週,14-21は第3週の水曜日になる
# $noが求める週
my $no = int(($hi-1)/7) + 1 ;
# 第2週又は第3週ならOK
if ($no == 2 || $no == 3){
return 1;
}else{
return 0;
}
}

my $nen= 2007;
for (my $tuki = 1; $tuki < 13; $tuki++){
for (my $hi = 1; $hi<32; $hi++){
my $ret = &hantei($nen,$tuki,$hi);
if ($ret == 1){
printf("定休日です %04d/%02d/%02d\n",$nen,$tuki,$hi);
}
}
}
exit(0);
-----------------------------
sub hanteiが判定ルーチンです。第2、第3の水曜日なら1が返ります。
以外は0が返ります。
2007年の第2、第3の水曜日を求めています。

#1です。判定ルーチンのコード例です。
-----------------------------------
# 第2,3水曜日判定ルーチン
use Time::Local;
sub hantei
{
# 入力パラメータは P1,P2,P3
# P1:年(2000~)
# P2:月(1~12)
# P3:日(1~31)
my $nen = shift(@_);
my $tuki = shift(@_);
my $hi = shift(@_);
my $mday = $hi;
my $mon = $tuki - 1;
my $year = $nen - 1900;
# 曜日を求める為に timelocal->locatimeの変換を行う
my $ltime=timelocal(0...続きを読む


人気Q&Aランキング

おすすめ情報