質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

2回答

1891閲覧

htmlファイル内の日付テキストを、一週間単位で自動更新したい

ttaison

総合スコア19

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2016/11/15 03:11

ただいま以下のようなプログラムを実装するにあたり、作業が行き詰っております。

/**
要望:html上にある日付テキストを自動で更新したい。

例: 11/15と表示されていた場合、11/16の0:00になった時点で、その日付テキストを11/22に更新 この更新をループする

条件---------- ・取得する日付は1週間後の日付 ・取得するタイミングは現在日時が表示している日付を超えた時

**/

moment.jsというライブラリを見つけて日付の取得部分は解決できたように思えるのですが、これを現在日時と照らし合わせてアクションさせるところがいまいち要領を得ず、先に進まなくなっております。

当方webデザイナー。javascriptは、jqueryを使用できる程度の知識です。
もしなにかいい方法があれば、ご教授お願い致します。

現在使用しているツール
・gulp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/11/15 03:15

ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。
ttaison

2016/11/15 04:40

ご指摘ありがとうございます。再度投稿する際は掲載させていただきます^^
guest

回答2

0

javascriptにおける時間は当然クライアントPC側のローカル時間です
ですのでクライアント側の時計が狂っていれば正しい更新になりません
その上で、以下2方式のいずれかを選択する必要があります

  • 間違っていてもクライアントPCの時間で処理する
  • クライアントPCの時間は無視し、サーバー側の時間で処理する

ただしその場合サーバーのlocaleに引っ張られて他の標準時をつかっている
ユーザーは中途半端な時間で更新される可能性がある

いずれにしてもページが読み込まれたときに更新タイミングまでの
時間を計算して、setTimeoutで予約をいれておけば済みます。

投稿2016/11/15 05:23

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttaison

2016/11/15 05:58

ありがとうございます。なかなか知識が追いつきませんが、ひとつずつ試していきたいと思います^^
mukkun

2016/11/15 06:32

そうですね。 確かに逆算した値を突っ込めば論理的には「setTimeout」でできますが、 長時間の場合、結構ずれた記憶がありましたが今はそんなことないんでしょうか。
yambejp

2016/11/15 06:48

たしかにsetTimeoutはPCのタイマー処理ですから一発勝負は怪しいかなぁ ご提示のようにsetIntervalの方が確実なような気もします
guest

0

ベストアンサー

動くかわかりませんが、こういうロジックでどうでしょうか。

###追記
度々すみません。。ぼけぼけです。
flagを追加しました。

JavaScript

1var gMoment = moment()._d, // 初回でmoment日付を取得 2 gFlag = true; // フラグ 3 4// 1秒毎に処理 5setInterval(function () { 6 var _hour = gMoment.format('H'); // gMomentから時間を取得 7 8 // 時間が0になったら 9 if (_hour == 0 && gFlag) { 10 // 翌日になったらの処理 11 gMoment = gMoment.add(6, 'day'); // 日を6日進める 12 $('.header').text(gMoment.format('YYYY年M月D日')); // moment日付の付与とテキストの変更 13 gFlag = false; 14 } else { 15 gMoment = moment()._d; 16 17 if (_hour == 1 && !gFlag) { 18 gFlag = true; 19 } 20 } 21}, 1000);

投稿2016/11/15 03:31

編集2016/11/15 04:07
mukkun

総合スコア882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttaison

2016/11/15 04:41

ありがとうございます!追記までいただき、感謝です^^ 一度日付を調整して確認してみます!
ttaison

2016/11/15 06:46 編集

すみません、動きませんでした 汗 ひとつ確認なのですが、 上記の .header という部分は、表示させたい場所(要素)のクラス名という解釈でよかったでしょうか?
mukkun

2016/11/15 07:39

はい。相違ございません。 動かしてないのとmomentに関してはdocを見ながら書いたので、 おそらくmomentあたりの使い方が間違っているのだと思います。。 (変数gMomentにmomentオブジェクトがはいってないのかな。。) moment()._d を moment() に変更すれば動くかも。。 ※変更するところは2個なので注意! http://momentjs.com/docs/
ttaison

2016/11/15 08:56

ありがとうございます。少しずつ調整していきながら確認してみます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問