回答編集履歴
6
文法の修正
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にはそういった
|
20
|
+
実際に.toJSON()やJSON.stringify()した場合、`"2017-08-22T14:58:32.352Z"`という文字列になります。JSON上では、これが元々Dateを表していたのか、それとも初めからこういう文字列だったのかを判断することはできません。JSONにはそういった日時のデータの場合の表し方が規定されておらず、単なる文字列としてしか表現しようがないからです。
|
21
21
|
|
22
22
|
何が言いたいかというと、JSONだけでは、JSONの中のデータがDateのような日時を表すデータであると言うことを示すことができないと言うことです。それではオブジェクトを正確にシリアライズ化できたのは言えないと思います。
|
23
23
|
|
5
等追加
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
とくに???
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
コードが違っていた
answer
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
console.log(newDate.constructor)
|
33
33
|
```
|
34
34
|
|
35
|
-
最初に渡しているものが
|
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 =
|
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
サンプルで使っているのが違うぞ
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
全てなのかどうかまでは確認していません。
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();
|