A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
サーバー側で、アクセスした側の時間を記録して管理しているとこはありますか?
100万人アクセスしたらそれをすべて覚えておくのですか?現実的?
ページからフォーカスが外れたら、それまでのカウントを記録するのではなく、
一番最初にアクセスした時間を記録して、そこからの差分でよくないですか?
アクセスした側のPCの時間を基準としているので、曖昧ですよ?大丈夫?
No.7
- 回答日時:
//つづきます
function init () {
var doc = document;
var now = new Date;
var old = CookieManajer.get (doc, LAST_ACCSESS);
var fDay, oDay;
if (old) {
oDay = new Date (old);
}
else {
fDay = new Date (now);
fDay.setDate (now.getDate () + SAVE_DAY);
CookieManajer.set (doc, LAST_ACCSESS, now.toString (), +fDay);
oDay = now;
}
disp (DayCounter.create.call (oDay, ENABLE_TIME, null, null, true));
}
init ();
</script>
</body>
DayCounter は、汎用性を持たせようと努力してみました。
基本的には、その日の0時を基準として、何時間おきに、何分か待って始まり、区切りの時間以前でも終了できるようにしました。もちろん繰り替えさないこともできます。
まぁこれを自分が使いこなすかは未知数ですが・・・。
今回の収穫。
Object.prototype.toString.call (obj) ;//typeof xxx
No.6
- 回答日時:
たの かいとうしゃさまの いけんを さんこうに べんきょうのため かきました。
(たぶん)ながいので ぶんかつします。
ぜんかくくうはくは、はんかくにしてね。
<!DOCTYPE html>
<title></title>
<body>
<p>Day & Time:<input type="text" id="hoge" size="40"></p>
<script>
(function () {
function setCookie (doc, name, value, expires, path, domain, secure) {
if (3 > arguments.length) throw new Error;
var cookie = [ encodeURIComponent (name) + '=' + encodeURIComponent (value) ];
if (expires) cookie[cookie.length] = 'expires=' + new Date (expires).toUTCString ();
if (path) cookie[cookie.length] = 'path=' + encodeURI (path);
if (domain) cookie[cookie.length] = 'domain=' + encodeURI (domain);
if (secure) cookie.push ('secure');
doc.cookie = cookie.join ('; ');
}
function getCookie (doc, name) {
if (2 > arguments.length)
throw new Error;
var n = encodeURIComponent (name).replace (/\W/g, '\\$&');
var v = doc.cookie.match (new RegExp (n + '\\s*=\\s*(.*?)(?:[;,\\s]|$)'));
return (v) ? decodeURIComponent (v[1]): '';
}
function replaceCookie (doc, name, value, expires, path, domain, secure) {
var oldValue = getCookie (doc, name, value);
setCookie.apply (null, arguments);
return oldValue;
}
//_________
var CookieManajer = new Function;
CookieManajer.set = setCookie;
CookieManajer.get = getCookie;
CookieManajer.replace = replaceCookie;
this.CookieManajer = CookieManajer;
}) ();
//__________
(function () {
function DayCounter (base, span, start, end, once) {
this.baseDate = base;
this.spanDate = span;
this.startDate = start;
this.endDate = end;
this.onceFlag = once;
}
function getRestTime () {
var base = this.baseDate.getTime ();
var end = this.endDate.getTime ();
var span = this.spanDate.getTime ();
var start = this.startDate.getTime ();
var time = (new Date).getTime () - base;
if (! this.onceFlag)
time %= span;
if (time < start) return true;
if (end < time) return false;
return end - time;
}
//_________
function padding2 (num) {
num = Math.floor (num);
return (num < 10 ? '0': '') + num;
}
function split (time) {
return [
Math.floor (time / 86400000) + '',
padding2 (time % 86400000 / 3600000),
padding2 (time % 3600000 / 60000),
padding2 (time % 60000 / 1000)
];
}
function setPeriod (day, hour, min, sec, ms) {
if (31 < day)
throw new Error;
var timeValue = Date.UTC (1970, 0, day + 1 || 0, hour || 0, min || 0, sec || 0, ms || 0);
return new Date (timeValue);
}
function argChecker (arg, defaultValue) {
switch (Object.prototype.toString.call (arg)) {
case '[object Number]' : return new Date (arg);
case '[object Date]' : return arg;
case '[object Array]' : return setPeriod.apply (null, arg);
}
return defaultValue;
}
function create (span, start, end, once) {
var d = new Date;
var e = new Date (d.getUTCFullYear (), d.getUTCMonth (), d.getUTCDate ());
base = argChecker (this, e);
span = argChecker (span, setPeriod (1));
start = argChecker (start, setPeriod (0));
end = argChecker (end, span);
once = !!once;
return new DayCounter (base, span, start, end, once);
}
//_________
DayCounter.prototype.getRestTime = getRestTime;
DayCounter.create = create;
DayCounter.setPeriod = setPeriod;
DayCounter.split = split;
this.DayCounter = DayCounter;
}) ();
// 本題はここから
var ENABLE_TIME = [0, 0, 30]; //[day,hour,min]
var LAST_ACCSESS = 'LastAccess';//クッキーの名前
var SAVE_DAY = 1;//クッキーの保存期間 (day)
function disp (obj) {
var target = document.getElementById ('hoge');
setInterval (
function () {
var time = obj.getRestTime ();
target.value =
('number' === typeof time)
? DayCounter.split (time).join (':')
: '00:00:00:00';
}, 1000);
}
No.5
- 回答日時:
ページを閉じてる間の時間はどうするのかな
止める
経過時間(か残り時間)をクッキーかウェブストレージに記録、再開時はその時間を利用
進める
スタートした時間を記録(または30分後にあたる時間をクッキーかウェブストレージに記録)
再度アクセスした際にその時間を過ぎていたら0を表示そうでなければ残り時間を表示
厳しく管理するのならやっぱりサーバー側に記録しないと改ざんされちゃいそうですね。
時間の取得はnew Date()で、毎秒カウントするのはsetIntervalを利用します。
new Date()はそのままnew Date()で引くことで経過ミリ秒を取得できます(1000msで1秒)
hajime = new Date();
keika = new Date() - hajime;
setIntervalの精度はブラウザによってまちまちなので精度が必要な場合は毎回時間を取得して差を求めるのがいいかと思います。
必要なヒントは出したのでレッツトライ!
No.4
- 回答日時:
この回答へのお礼
お礼日時:2012/10/11 11:42
頂いたURLは参考になりそうですね。Cookie操作の部分がカウントダウンとうまくつなげれるかどうか色々調べてみます。ご回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- JavaScript Javascriptで出来ること 1 2022/05/16 20:19
- JavaScript HTML&CSS Javascriptによる動的テーブル 1 2023/03/27 19:51
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- 日用品・生活雑貨 昔の柱時計のように、1時間ごとと、各時間の半(30分)のところで鐘が鳴る時計を教えてください つまり 2 2022/04/29 15:53
- Instagram HTML5の廃止とJavaScript 2 2022/04/13 21:05
- その他(プログラミング・Web制作) WEBアプリ開発に必要な言語 5 2023/06/28 16:57
- その他(コンピューター・テクノロジー) 4勤2休のシフト作成 1 2022/12/15 15:38
- その他(悩み相談・人生相談) 失敗に落ち込んでいます 10 2023/01/01 20:18
- HTML・CSS Webページを作るには、HTMLとCSSだけ出来れば大丈夫なのですか? JavaScriptのスキル 6 2022/08/21 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
googleスプレッドシートのApps ...
-
シンプルなweb版スタンプラリー...
-
テーブルセル内のinput要素のna...
-
ドラッグでセルを選択した後に
-
特定のclassを表示、非表示にする
-
google apps scriptの終了のさせ方
-
正規表現について質問です。条...
-
C#で、ContextMenuStripに動的...
-
C# 演算 分岐処理 繰り返し処理
-
javaScriptのコードの修正をお...
-
ローカルにあるファイルを検索...
-
Jscriptからのオープン
-
javaScript textareaの一行あた...
-
gas スプレッドシートがアクテ...
-
VSCODE[Python]の設定について
-
メールフォームの日付入力フォ...
-
翌月を取得するGASが分かりません
-
javascriptカウントタイマー設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
なぜmatchメソッドがエラーにな...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
javascriptでiframeのURL変更は?
-
C#で、ContextMenuStripに動的...
-
ASP.NET MVCでObjectをjsに渡す
-
1日1回引けるJavaScriptおみく...
-
javascriptでテーブルに追加し...
-
JavaScriptを使って毎日決まっ...
-
googleスプレッドシートのApps ...
-
JavaScriptで文字列の特定文字...
-
アクセス時からのカウントダウ...
-
ローカルにあるファイルを検索...
おすすめ情報