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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

2544閲覧

javascript new Date()について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/03/17 10:49

javascript

1var ob={ 2 "date":null 3} 4ob.date=new Date(2018,0,1); 5localStorage.setItem("key",JSON.stringify(ob));

new Date(2018,0,1)とJSON.parse(localStorage.getItem("key")).dateが同じ値になるようにすればどうすればいいですか?

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

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

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

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

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

guest

回答3

0

以下のように.dateの値をnew Date()に渡します。

javascript

1new Date(JSON.parse(localStorage.getItem("key")).date)

JSON.stringifyするとき、new Date(2018,0,1)

"2017-12-31T15:00:00.000Z"

という文字列になります。これは、ISO 8601という形式で時刻を表した文字列で、そのまま Date に渡せば、同じ時刻を表す Date を作れます。

投稿2018/03/17 11:36

編集2018/03/17 11:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

イメージ説明

参考情報

  • Understanding Date and Time in JavaScript

https://www.digitalocean.com/community/tutorials/understanding-date-and-time-in-javascript

  • 要注意!?JavaScriptの日付の比較の5つのTips

https://www.sejuku.net/blog/23115

...
Date型の == 演算子は、日付が一致することを比較する演算子ではありません。
Date型の == 演算子は、Date型のインスタンスが一致するかどうかを比較する演算子です。
そのため、インスタンスが違う場合、== は false を返します。
...

  • 面倒なJavaScriptの日付の処理は「date-fns」でラクに片付けよう

https://www.webprofessional.jp/date-fns-javascript-date-library/

投稿2018/03/17 11:59

katoy

総合スコア22324

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

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

defghi1977

2018/03/17 12:05

先程比較演算子で「うん?」となりました. こんなもん簡単だろうといった思い込みがある程ハマりますね…
miyabi-sun

2018/03/18 06:55

例えばPHPは`[] == []`の結果はtrueですが、JSではfalseになります。 単純にJSの==演算子でオブジェクト同士の比較をした場合、 オブジェクトのアドレス番地の比較になります。 Date型もオブジェクトのインスタンスなのでこの例に盛れず、==で比較すると常にfalse。 この辺の仕様を知っていればあまり意外ではないと思いますけど、他言語出身の人だと面食らうかもしれませんね。
guest

0

筆者はhooさんの回答を支持します.


Date(2008,0,1)の引数は日本標準時(正確にはシステムのタイムゾーン)を基準とした日付値を表します.
一方JSON.stringify(ob)を介することでDateオブジェクトはUTC時刻を基準とした日付文字列に変換されます.
NOTE:
UTC時刻+9時間=日本標準時

従って, あなたは2008/01/01 00:00:00に相当するDateオブジェクトを生成したものの, JSON化された日付することで(見た目上)それより9時間前の2017/12/31 15:00:00が得られて, 混乱してしまったのです.

参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date


NOTE:
以下は見た目を重視した回りくどい内容になっています.

この問題はJSON化する前にDate.toString()メソッドを使って日付を日本標準時での日付文字列とすることで解決します.

JavaScript

1const date = new Date(2018, 0, 1); 2const parsed = new Date(JSON.parse(JSON.stringify({d: date.toString()})).d); 3console.log(date.toString() == parsed.toString());//true

投稿2018/03/17 11:46

編集2018/03/17 11:53
defghi1977

総合スコア4756

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問