プロが教える店舗&オフィスのセキュリティ対策術

プログラミング初心者です。。。
初歩的なご質問ですいません。

ネットショップでページに自動で更新日を表示したいと考えています。
コチラでご教授いただき、表示するところまではできたのですが、肝心な定休日についての動作を忘れていました。。。

例えば
・毎週日曜日
・指定した日付(緊急の定休日や祝日など)

この二つの条件どちらかの場合、更新を行わない。というスクリプトを組みたいのです。。。
自分で色々調べてやってみたのですがどうも理解できず・・・

どうかご教授をお願いします><
ちなみに現在完成しているのはこんな感じです↓
(毎朝10時になったら更新されるようになっています。)

<SCRIPT type="text/javascript">
<!--
date = new Date();
y = date.getFullYear();
m = date.getMonth() + 1;
d = date.getDate();
var h = date.getHours();
if (h < 10) {
d -= 1;
}
if (m < 10) { m = "0" + m; }
if (d < 10) { d = "0" + d; }

document.write(y + "/" + m + "/" + d);
// -->
</SCRIPT>

どうぞよろしくお願いします;;

A 回答 (9件)

ていせい


× 私は貴方に負けないく、やらかしている
を、
○ 私は貴方に負けないくらい、やらかしている
に。


さて、きほんにかえって。

そもそも、せいしきに、こうしんもしていないのに、それをひょうじだけ、ごまかすのは、いかがなものだろう。
そもそも(その2)、すくりぷとでごまかすのではなく、さーばーがわでやるべきだろう。

いや~ここまでてんかしておいて、いうのもなんなのですが・・・
(やらかした数+=3)
    • good
    • 0

moyokocchiさん



回答ではない書き込みお許しください


babu_babooさん

別に自分は悪意を感じてはいません。
ネタのようなものだと思っています。
ベストアンサーのポイントを欲しがっていらっしゃるなんてことも全く考えていません。
ただ自分の回答が本当にひどかったので、指摘していただいたbabu_babooさんに一言いいたかっただけですので。


他の回答者様、閲覧されている皆様、スレ汚し申し訳ありませんm(__)m
    • good
    • 0

> いや~な空気



そう感じたなら申し訳ない。ごめんなさい。



yamada_g さん、

総じて悪意など更々ないのだけれど、貴方に一言、言っておく!!
「アホな回答」の数では、私は貴方に負けないく、やらかしている。きっと桁が違う。(笑)
(86400とか、24*60*60 とかもを使いたくなかっただけ。)


別に、ベストアンサーのポイントが、欲しいわけじゃ~ないんだ。(笑)
    • good
    • 0

表示されるひにちを営業日だけにしたいってことでしょうか?


当然、2日前とか3日前とかになる可能性もあるということですよね?

一方で、10時以前の-1日というのは、営業日なのかあるいは本当の「前日」で非営業日でもそのほうがいいのだろうか?
どっちなのかわからないので、そのへんは調整していただくとして…
営業日かどうか判定する関数を別に作っておいて(仮にholidayとします)、

 while( holiday(date) ) date.setDate(date.getDate()-1);

みたいにして、営業日になるまで日付けを戻してあげれるだけでよろしいかと。
その後の、表示する部分などはそのまま。
(holidayは休日(=非営業日)だとtrueを返す関数)


holidayの部分は、
曜日だけならスクリプトでそのまま判定できますが、祝日は国によって違うので作成しないとなりません。
(誰かが日本の休日用につくったものが、あるかも知れませんけど)

規則が日にちで決まっているものと、○月の第何月曜などで決まっているものと、「祝日と祝日の間の日」で決まっているものとありますが、その規則を盛り込むで作成するか、単純に日にち指定にしておいて毎年更新するようにするか…
でも、「定休日」の部分はこれからもはずれるので、その部分については自作する必要があります。


例えば、土、日を休日と判断するだけの関数の場合の例
function holiday(date){
 var week = date.getDay();
 return (week==0 || week==6);
}
    • good
    • 0

まぁ分からなくもないけど、なんだかいや~な空気だね^^



(function(date, arr) {
 var d = date.getDate();
 var day = date.getDay();
 var h = date.getHours();
 for (var i = 0, l = arr.length; i < l; i++) {
  if ((i === 0 && arr[i] === day) || arr[i] === d || h < 10) {
   date.setTime(date.getTime() - 86400000); // 24時間前の時間値をセット
   break;
  }
 }
 var y = date.getFullYear();
 var m = date.getMonth() + 1;
 if (d !== date.getDate()) d = date.getDate(); // 変更されていたらそれを使う
 if (m < 10) { m = "0" + m; }
 if (d < 10) { d = "0" + d; }
 document.write(y + "/" + m + "/" + d);
})(new Date(), [0, 3, 13, 23]); // [日曜日, 指定日, ...]


No.1で指摘のあった前日の取得部分以外は単純な比較だけだし、難しくないでしょ。
    • good
    • 0

moyokocchiさん


前回の回答で全然考慮不足のコードを書いてしまって申し訳ありませんでした。

babu_babooさん
それって自分のことですよね。
アホな回答でBAもらってしまい本当に本当にすみませんでした。(バッドアンサーですね・・・)
    • good
    • 0

> どうしたらいいですか



えっ! そりゃ~「ベストアンサー」に、かがやいたひとが、その「名」にかけて、こたえるのでは?
setInterval を、どうりようしてよいのか、わかりませんでした。

var hdayList = {
 110: true,
 429: true,
 503: true,
 504: true,
 505: true,
 1103: true,
 1123: true,
 1223: true
};

function previousHolidayCount (d) {
 var cnt = 0;
 var cmp;
 var sun;
 
 do {
  sun = (d.getDay () == 0);
  hdy = hdayList[(d.getMonth () + 1) * 100 + d.getDate ()];
  if (! sun)
   if (! hdy)
    return cnt;
  cnt += 1;
  d.setTime (d - Date.UTC (1970, 0, 2));
 } while (true);
}

var hcnt;
var date = new Date;

if (date.getHours () < 10)
 date.setTime (date - Date.UTC (1970, 0, 2));

if (hcnt = previousHolidayCount (new Date (date)))
 date.setTime (date - Date.UTC (1970, 0, 1 + hcnt));

var y = date.getFullYear ();
var m = date.getMonth () + 1;
var d = date.getDate ();

document.write([ y, (m < 10 ? '0': '') + m, (d < 10 ? '0': '') + d].join ('/'));
    • good
    • 0

こちらの


http://www.hoge256.net/2007/08/64.html
「n日後、n日前の日付を求める」あたりが参考になると思います。

後、「setInterval」か「setTimeout」を使えば、表示を自動更新できますね。
    • good
    • 0

だからね、1にちのひはどうするの?0にちでよいの?


そこもかんがえようね。

この回答への補足

<SCRIPT type="text/javascript">
var date = new Date;

if (date .getHours () < 10)
 date.setTime (date - Date.UTC (1970, 0, 2));

var y = date.getFullYear ();
var m = date.getMonth () + 1;
var d = date.getDate ();

document.write([ y, (m < 10 ? '0': '') + m, (d < 10 ? '0': '') + d].join ('/'));
</SCRIPT>

以前ご教授いただいたコチラに変えました!当初は意味がわからず・・・すいませんでした;;

補足日時:2011/02/18 14:35
    • good
    • 0
この回答へのお礼

あ!!
なるほどです!!盲点でした・・・;;ありがとうございます。
そこは書き換えるとして休日はどうしたらいいですか・・・?すいませんご教授願います。。。

お礼日時:2011/02/18 14:21

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