JavaScriptで、例えば2月10日24時までは0210.htmlに、2月11日0時からは0211.htmlに、2月15日0時以降は0215.htmlにリダイレクトといった動作が可能なスクリプトは簡単でしょうか。できればjQueryを利用した方法が嬉しいです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/02/11 20:36:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mars No.6

回答回数203ベストアンサー獲得回数20

ポイント100pt

他の回答へのコメントから、リダイレクト先(期間)の複数設定があってもよさそうだったのでそういうサンプル。

ただし一度に設定できれば楽だけど、必要以上にリダイレクト先が分る状態はよろしくないのかも。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var now = new Date();
jQuery.each({
	// リダイレクト先 : (開始日時、終了日時)
	'abc.html':new Array('2010/2/9','2010/2/10 23:59:59'),
	'def.html':new Array('2010/2/11 15:00:00','2010/2/11 22:00:00'),
	'ghi.html':new Array('2010/2/13','2010/2/14 09:59:59'),
},function(rd,dt){
	if(new Date(dt[0]) <= now && now <= new Date(dt[1]))
		document.location.href = rd;
});
document.location.href = 'xyz.html';//設定されてない時のリダイレクト。不要なら削除
</script>

ソース隠しについてはせいぜいが外部JSファイル化するぐらい?

第三者が見てわかりづらくするって事は、自分が見ても/更新する時わかりづらくなりそうだし。

id:Studio101

おお、これは汎用性高そうですね。ありがとうございます :-)

2010/02/11 20:30:24

その他の回答5件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント30pt

単純に書くと下記のような感じ。

<html>
<body>
  <script type="text/javascript">
    var now = new Date();
    var m = (now.getMonth() > 8 ? "" : "0") + (now.getMonth() + 1);
    var d = (now.getDate() > 9 ? "" : "0") + now.getDate();
    location.href = m + d + ".html";
  </script>
</body>
</html>

URL必須との事なので、杜甫々さんのページ

http://www.tohoho-web.com/

http://www.tohoho-web.com/js/date.htm

※ご不明な点はコメント欄を開けて書いていただけると、

 可能な範囲で応答します。

id:Studio101

なるほど、シンプルでいいですね。でもこれだと全ての日にちのhtmlを用意しなきゃいけないなと。時間設定も含めるとかなりのhtmlが必要になるのかな。

2010/02/11 00:11:04
id:jp---jp No.2

回答回数41ベストアンサー獲得回数1

ポイント10pt

忘れましたが!あります。思い出したら、いいます。(追伸 はてなポイントください。10Pでいいので。)

id:Studio101

OKです。で、ポイント送るにはどうしたらいいのでせうか? 最近使ってなかったのですっかり忘れてます。

2010/02/11 00:15:00
id:km1967 No.3

回答回数541ベストアンサー獲得回数40

ポイント20pt

まずはお願いなのですが、

ご質問に論理的矛盾がありますので

不適当な回答が集まっても混乱をきたしますから、私への返信欄か、

あるいは、コメント欄を開く設定に変更してコメント欄)に、

書き加えておくことを勧めます。


矛盾点

  1. 「2月10日24時」と「2月11日0時」は同日同時刻をあらわす→前者は「2月10日23時59分59秒」という意味か?
  2. 年号は関係ないのか。2010年でも2011年でも同じページへリダイレクトすればいいのか?
  3. jQueryを使うまでもなく簡単にできるのだが、それでもjQueryを使わなくてはいけないのか?
id:Studio101

失礼しました。

1.おっしゃる通りです。2月10日23時59分59秒という意味です。

2.年号は設定出来た方がいいですが、1年以上の利用を考えてはいません。

3.時間の指定を誰でも簡単に行えるようにするにはこういったライブラリを利用した方がいいのかと思いまして。現在jQueryを利用しているものですから。例えば2010-02-10-23:59:59とか分かりやすい表記ができる方法があるとベターです。

2010/02/11 00:24:05
id:horonict No.4

回答回数257ベストアンサー獲得回数51

ポイント150pt

こんな感じでいかがでしょう。index.htmlの頭の方に書いてください。

最初の4つの変数にキャンペーン期間を入れてください。

これらの変数のエラーチェックはしていません。

また、年またがりの処理(例:キャンペーン期間が2010年12月29日~2011年1月4日)はできません。


var from_dt  = '02-14-00:00:00';
var from_url = 'now.html';
var to_dt    = '02-21-22:00:00';
var to_url   = 'after.html';

var t0 = new Date();
var ee = from_dt.match(/(\d{2})-(\d{2})-(\d{2}):(\d{2}):(\d{2})/);
var t1 = new Date(t0.getFullYear() + '/' + ee[1] + '/' + ee[2] + ' ' + ee[3] + ':' + ee[4] + ':' + ee[5]);
var ee = to_dt.match(/(\d{2})-(\d{2})-(\d{2}):(\d{2}):(\d{2})/);
var t2 = new Date(t0.getFullYear() + '/' + ee[1] + '/' + ee[2] + ' ' + ee[3] + ':' + ee[4] + ':' + ee[5]);

if (t0 >= t1 && t0 < t2)    location.href = from_url;
else if (t0 >= t2)          location.href = to_url;

jQueryは使っていません。このような計算処理ではjQueryの使い途がないためです。

id:Studio101

おー! 確認できました! ありがとうございます!

2010/02/11 01:34:28
id:hvhv3002 No.5

回答回数13ベストアンサー獲得回数0

ポイント10pt

簡単です

頑張ってください(^_^)

id:Studio101

無事に動きました。重ね重ね御礼。

2010/02/11 20:30:59
id:Mars No.6

回答回数203ベストアンサー獲得回数20ここでベストアンサー

ポイント100pt

他の回答へのコメントから、リダイレクト先(期間)の複数設定があってもよさそうだったのでそういうサンプル。

ただし一度に設定できれば楽だけど、必要以上にリダイレクト先が分る状態はよろしくないのかも。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var now = new Date();
jQuery.each({
	// リダイレクト先 : (開始日時、終了日時)
	'abc.html':new Array('2010/2/9','2010/2/10 23:59:59'),
	'def.html':new Array('2010/2/11 15:00:00','2010/2/11 22:00:00'),
	'ghi.html':new Array('2010/2/13','2010/2/14 09:59:59'),
},function(rd,dt){
	if(new Date(dt[0]) <= now && now <= new Date(dt[1]))
		document.location.href = rd;
});
document.location.href = 'xyz.html';//設定されてない時のリダイレクト。不要なら削除
</script>

ソース隠しについてはせいぜいが外部JSファイル化するぐらい?

第三者が見てわかりづらくするって事は、自分が見ても/更新する時わかりづらくなりそうだし。

id:Studio101

おお、これは汎用性高そうですね。ありがとうございます :-)

2010/02/11 20:30:24
  • id:kn1967
    >これだと全ての日にちのhtmlを用意しなきゃいけないなと。
    >時間設定も含めるとかなりのhtmlが必要になるのかな。

    ご希望が単純なリダイレクトですから、当然そうなる訳ですが、
    本当にやりたかった事はリダイレクトではなくて、
    日時に合わせて動作を変えたかったって事?

    そうなると、今回のご質問への回答としては、
    回答1でひとまずは終了ということで、次に質問なさるとすれば、
    やりたい事を、もっともっと具体的に、こういった時は、
    ここをこうして、この場合は例外的にこうして、といったような形で、
    質問していただかないことには、何を答えてよいものやら判らないです。
  • id:kn1967
    来たね。まずはお願い・・・シリーズ(笑)
    大きな問題となる部分でもないのに、
    質問文の不備を突くだけ突いて、後は放置。
    今年だけで50回は超えたんじゃないか?
  • id:Studio101
    すみません。もう少し具体的に。

    キャンペーンなど、日にち限定のケースを想定しています。

    例えば、普段はindex.htmlで、リダイレクトされてbefore.htmlが表示されています。
    2月14日0時から2月21日21時59分までは、now.htmlにリダイレクトされます。
    その後、2月21日22時00分からはafter.htmlが表示されるといった内容です。

    htmlファイルは、before.html、now.html、after.htmlの3つです。

    そして、日付と時間は誰でも分かりやすい形で記述できるのが理想です。
    ソースの中に、

    02-14-00:00:00
    now.html

    02-21-22:00:00
    after.html

    などと書けばOKというのがいいなと。
  • id:Studio101
    別に放置するつもりはありませんが、そろそろ就寝の時間です。
    明日朝また覗いてみます。
  • id:Studio101
    それから、何でこんなのjQueryを使う必要があるんだというのはそうなんですが、直接関係のない長いソースをオペレーションする人に見せたくないですし、間違いにくいソース記述が理想だからです。
  • id:kn1967
    javascriptはクライアントのパソコン上で動きますから、
    計算に使う時計はクライアントのパソコンです。

    つまり、時計が狂っていたら、あるいはワザと狂わせていたら・・・
    思ったとおりの動作をしない可能性があるという事になります。

    それでも良いという事であれば作ってみますが、
    基本はサーバサイドスクリプトでリダイレクトをかけることになります。

    そちらでお使いのサーバでphpやperlなどのスクリプトが使えるなら、
    それように書きますが、いかが?
    (本来であれば、別質問にでもしていただくところですが、
     この程度のスクリプトなら簡単なので、今回の質問に含んでも、
     まぁいいでしょうね。)
  • id:Studio101
    JavaScriptがクライアントの環境で時間がずれるのはしかたがありません。
    また、海外のユーザーは想定していません。

    それで、サーバーサイドスクリプトは使えないんですよ。一切。
  • id:Studio101
    設置を想定しているのは楽○というところでして。かろうじてクライアントサイドのスクリプトだけは動く場所があるらしいです。
  • id:Studio101
    horonictさんのソースで光明が見えました。ありがとうございます。これで行けると思いますが、もう少しソースコードを隠す形がベターかなと思いまして、もう少し回答をお願いしたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません