回答編集履歴

6

文法の修正

2017/08/22 15:57

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -15,9 +15,9 @@
15
15
  console.log(newDate.constructor)
16
16
  ```
17
17
 
18
- しかし、この方法には致命的な欠点があります。それは、日時っぽい文字列と日時を表す文字列を区別できないと言うこと、つまりは、それが日として解釈して良いのか判断付かないと言うことです。
18
+ しかし、この方法には致命的な欠点があります。それは、日時っぽい文字列と日時を表す文字列を区別できないと言うこと、つまりは、それが日として解釈して良いのか判断付かないと言うことです。
19
19
 
20
- 実際に.toJSON()やJSON.stringify()した場合、`"2017-08-22T14:58:32.352Z"`という文字列になります。JSON上では、これが元々Dateを表していたのか、それとも初めからこういう文字列だったのかを判断することはできません。JSONにはそういったことが規定されておらず、どこまでも独自のJSONに過ぎないからです。
20
+ 実際に.toJSON()やJSON.stringify()した場合、`"2017-08-22T14:58:32.352Z"`という文字列になります。JSON上では、これが元々Dateを表していたのか、それとも初めからこういう文字列だったのかを判断することはできません。JSONにはそういった日時のデータの場合の表し方が規定されておらず、る文字列としてしか表現しようがないからです。
21
21
 
22
22
  何が言いたいかというと、JSONだけでは、JSONの中のデータがDateのような日時を表すデータであると言うことを示すことができないと言うことです。それではオブジェクトを正確にシリアライズ化できたのは言えないと思います。
23
23
 

5

等追加

2017/08/22 15:57

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -70,6 +70,6 @@
70
70
 
71
71
  それでもやはり、JSONを使いたいと思うかも知れません。その場合は、この部分は日付であるというのが決め打ちされたJSONになることに注意するしかありません。それは、解釈が決め打ちされたJSONであって、汎用的なJSONでは無い、どこに持って行っても同じ解釈をされるJSONではない、と言うことに注意が必要です。
72
72
 
73
- なお、Date.parseのブラウザ間の実装の違いが気になる場合は、[Momemnt.js](https://momentjs.com/)を使うことをお勧めします。.NET独自のJSONのDate形式まで対応していますので、どんな形式で作られていようが大抵は対応できます。でも、.NET形式への変換はできないようです。せっかくSurferOnWwwさんが.NETの場合について色々説明してくれているのに、JavaScriptでは実現できる方法が見つけられなくて、ごめんなさい。
73
+ なお、Date.parseのブラウザ間の実装の違いが気になる場合は、[Momemnt.js](https://momentjs.com/)を使うことをお勧めします。.NET独自のJSONのDate形式まで対応していますので、どんな形式で作られていようが大抵は対応できます。でも、.NET形式への変換はできないようです。せっかくSurferOnWwwさんが.NETの場合について色々説明してくれているのに、JavaScriptでは実現できる方法が見つけられなくて、ごめんなさい。
74
74
 
75
75
  ただ、ここの文字列は日時を表すと決め打ちし、読み込ませないと行けないことには変わりありません。

4

とくに???

2017/08/22 15:54

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ###JSONは無理
4
4
 
5
- ES5準拠のほとんどのブラウザであれば、Date.prototype.toJSONやJSON.stringifyによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseやnew Dateで読み取ることはできるでしょう。(特に古いブラウザではできません。また、なにやら実装ずれがあるようで、最新のブラウザでも全てのブラウザでできるとは限らないようです。)
5
+ ES5準拠のほとんどのブラウザであれば、Date.prototype.toJSONやJSON.stringifyによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseやnew Dateで読み取ることはできるでしょう。(古いブラウザではできません。また、なにやら実装ずれがあるようで、最新のブラウザでも全てのブラウザでできるとは限らないようです。)
6
6
 
7
7
  ```JavaScript
8
8
  const date = new Date();

3

コードが違っていた

2017/08/22 15:53

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  console.log(newDate.constructor)
33
33
  ```
34
34
 
35
- 最初に渡しているものが違うのに、同じようにDateになってしまいます。
35
+ 最初に渡しているものが文字列なのに、同じようにDateになってしまいます。
36
36
 
37
37
  ###YAMLでやってみよう
38
38
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  ```JavaScript
56
56
  import YAML from 'js-yaml';
57
- const date = new Date();
57
+ const date = '2017-08-22T14:58:32.352Z';
58
58
  console.log(date);
59
59
  console.log(date.constructor);
60
60
  const yaml = YAML.dump(date);

2

サンプルで使っているのが違うぞ

2017/08/22 15:52

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ###JSONは無理
4
4
 
5
- ES5準拠のほとんどのブラウザであれば、Date.prototype.toJSONによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseで読み取ることはできるでしょう。(特に古いブラウザではできません。また、なにやら実装ずれがあるようで、最新のブラウザでも全てのブラウザでできるとは限らないようです。)
5
+ ES5準拠のほとんどのブラウザであれば、Date.prototype.toJSONやJSON.stringifyによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseやnew Dateで読み取ることはできるでしょう。(特に古いブラウザではできません。また、なにやら実装ずれがあるようで、最新のブラウザでも全てのブラウザでできるとは限らないようです。)
6
6
 
7
7
  ```JavaScript
8
8
  const date = new Date();

1

全てなのかどうかまでは確認していません。

2017/08/22 15:51

投稿

raccy
raccy

スコア21767

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ###JSONは無理
4
4
 
5
- ES5準拠であれば、Date.prototype.toJSONによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseで読み取ることはできるでしょう。(未対応の古いブラウザとかはできません)
5
+ ES5準拠のほとんどのブラウザであれば、Date.prototype.toJSONによって文字列化してシリアライズし、デシリアライズではその文字列をDate.parseで読み取ることはできるでしょう。(特に古いブラウザはできません。また、なにやら実装ずれがあるようで、最新のブラウザでも全てのブラウザでできるとは限らないようです。)
6
6
 
7
7
  ```JavaScript
8
8
  const date = new Date();