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

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

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

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

Q&A

解決済

3回答

3212閲覧

【javascriptの日付計算について】変数をセット

star24star

総合スコア115

JavaScript

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

0グッド

0クリップ

投稿2015/11/09 11:45

■質問
this.getで取得してきた日付から1日前、30日前を取得するには
どうしたらよいのか?

現在のコード(取得できない)

var day01 = this.get('yyyymmdd'); // yyyymmddは毎回違う日付が入ってくる // 仮にyyyymmddに20150101が入ってきたとする var day = new Date('day01'); day.setHours(0); day.setMinutes(0); day.setSeconds(0); this.set('ymd_1', day.setDate(day.getDate() - 1)); // ymd_1の中に'20141231 000000'が入ってほしい this.set('ymd_30', day.setDate(day.getDate() - 30)); // ymd_30の中に'20141202 000000'が入ってほしい 結果 => NaN

■やりたいこと

(1)
this.get('yyyymmdd')を 20150101 000000 (or 20150101 00:00:00) にしたい

(2)
(1)で取得した日付から1日前と30日前を計算させ、
ymd_1という変数へ格納したい
(setした変数は同ファイルではなく、別のファイルで扱う)

どうかご教授いただけますと幸いでございます。
宜しくお願い致します。

ーーー
前回、javascriptの日付計算について質問させていただきました。

日時の直指定、または今日の日付からですと取得できるのですが、
変数などをセットすると取得できない、または1970/01/01などになってしまいます。

<a href="https://teratail.com/questions/19678">【javascriptの日付計算について】 </a>

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

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

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

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

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

guest

回答3

0

ライブラリで手抜きして良いならmomentがオススメです。
http://momentjs.com/

Currently the following browsers are used for the ci system: IE8, IE9 on Windows 7, stable Chrome on Windows XP, Safari 10.8 on Mac and stable Firefox on Linux.

以上が対応ブラウザで、IE8~対応なのが嬉しいですね。

投稿2015/11/09 13:35

miyabi-sun

総合スコア21158

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

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

star24star

2015/11/09 23:53

ご回答くださいましてありがとうございます! 実はmomentも試してはみたのですが、読み込んでくれず…。 他のファイルでは使えるので書き方が悪かったのでしょうか
guest

0

To: star24star さん

this.get() における this の詳細が不明なので明確な答えは出来ませんが、"YYYY/MM/DD hh:mm:nn" 形式にするなら下記コードで実現可能です。

JavaScript

1function getDateStringFrom (year, month, date) { 2 var _date = new Date(year, month, date); 3 return [_date.getFullYear(), _date.getMonth(), _date.getDate()].join('/') + ' ' + [_date.getHours(), _date.getMinutes(), _date.getSeconds()].join(':'); 4} 5 6console.log(getDateStringFrom(2015, 11, 10)); // 2015/11/10 0:0:0

ゼロパディング処理は省略している為、String.prototype.padLeft でも使って下さい。
'1'.padLeft(2, '0') === '01' のように書けます。

投稿2015/11/10 00:32

think49

総合スコア18162

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

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

0

ベストアンサー

JavascriptはyyyyMMdd形式のパースメソッドがないので作ります。
下のparseメソッドはこちらから拝借しました
自分で作るのではなく好きなライブラリを使ってもいいと思います。

日付を操作する場合getDate()で日付を取り出して加減したあとsetDate()でセットします。

Javascript

1 function parse(str) { 2 var y = str.substr(0,4), 3 m = str.substr(4,2) - 1, 4 d = str.substr(6,2); 5 var D = new Date(y,m,d); 6 return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date'; 7 } 8 9 var day = parse('20150101'); 10 //1日前 11 day.setDate(day.getDate() - 1); 12 //30日前 13 day.setDate(day.getDate() - 30);

投稿2015/11/09 12:31

編集2015/11/09 12:34
rysh

総合スコア874

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

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

star24star

2015/11/10 00:01 編集

ご回答くださいましてありがとうございます! いろいろと試してみたのですが、"str.substr" の部分でエラーが起こってしまいます。 また、this.get('yyyymmdd');は最初からyyyymmddの形式で入ってくるのですが、やはり function parse(str) {...}の処理は必要なのでしょうか
rysh

2015/11/10 00:18 編集

this.get('yyyymmdd');という書き方を見たことが無いんですが、何かのFrameworkやライブラリを使っていますか? this.get('yyyymmdd');で取得したyyyymmdd形式の値が日付型なのか文字列型なのか数値型なのかによって続くコードが変わります。 alert(typeof this.get('yyyymmdd')); などで型を確認してみてください。 また、エラーが発生している場合、エラーの内容も提示してもらえれば調査しやすいです。 もし発生しているエラーが > b.substr is not a function というエラーであれば日付部分が文字列ではなく数値として渡っている可能性があるので以下のように書くとうまくいきます。 var day01 = 20150101; var day = parse(day01.toString());
star24star

2015/11/10 00:25 編集

下記のようなエラーです。 > TypeError: str.substr is not a function 現在のコード ``` function parse(str) { var y = str.substr(0,4), m = str.substr(4,2) - 1, d = str.substr(6,2); var D = new Date(y,m,d); return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date'; } var day01 = parse(this.get('yyyymmdd')); var day = parse(day01.toString()); this.set('yyyymmdd_1', day.setDate(day.getDate() - 1)); ``` --- Webブラウザで表示できるファイルではないため、gitを使用して確認しているのですが、 console.logなど使っても変数の中身が確認できず…。 少し調べてみます
rysh

2015/11/10 00:56

> var day01 = parse(this.get('yyyymmdd')); > var day = parse(day01.toString()); この部分ですが、parseを二回実行する必要はないです。 > var day01 = this.get('yyyymmdd'); > var day = parse(day01.toString()); これでどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問