teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

patch -> diff

2022/05/30 21:03

投稿

aobaoba
aobaoba

スコア63

answer CHANGED
@@ -1,30 +1,30 @@
1
- 苦戦している様子なので、僭越ながら補足させて頂きます。
1
+ 苦戦している様子なので、僭越ながら補足させて頂きます。
2
-
2
+
3
- 意図した日時を得るには`Date`コンストラクターに日時を表す文字列を与えることです。
3
+ 意図した日時を得るには`Date`コンストラクターに日時を表す文字列を与えることです。
4
-
4
+
5
- 簡単な対処としては、スプレッドシートの年月日と時分秒のセルを文字列にすることです。
5
+ 簡単な対処としては、スプレッドシートの年月日と時分秒のセルを文字列にすることです。
6
- 表示形式を書式なしテキストに変更すれば文字列として取得できます。
6
+ 表示形式を書式なしテキストに変更すれば文字列として取得できます。
7
-
7
+
8
- もし、表示形式を変えたくない場合は次のようにします。
8
+ もし、表示形式を変えたくない場合は次のようにします。
9
- セルの表示形式が日付や時刻の場合は`Date`オブジェクトとして取得します。
9
+ セルの表示形式が日付や時刻の場合は`Date`オブジェクトとして取得します。
10
- ```patch
10
+ ```diff
11
- - var start1 = sheet.getRange(i, 1).getValue().toString();
11
+ - var start1 = sheet.getRange(i, 1).getValue().toString();
12
- - var start2 = sheet.getRange(i, 2).getValue().toString();
12
+ - var start2 = sheet.getRange(i, 2).getValue().toString();
13
- + var start1 = sheet.getRange(i, 1).getValue().toLocaleDateString();
13
+ + var start1 = sheet.getRange(i, 1).getValue().toLocaleDateString();
14
- + var start2 = sheet.getRange(i, 2).getValue().toLocaleTimeString();
14
+ + var start2 = sheet.getRange(i, 2).getValue().toLocaleTimeString();
15
- ```
15
+ ```
16
-
16
+
17
- [toLocaleDateString](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString)
17
+ [toLocaleDateString](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString)
18
- [toLocaleTimeString](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString)
18
+ [toLocaleTimeString](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString)
19
- `start1`と`start2`の内容をログで確認してみてください。
19
+ `start1`と`start2`の内容をログで確認してみてください。
20
-
20
+
21
- この日時を表す文字列は様々な形式を解釈しますが、今後は[ISO8601](https://ja.wikipedia.org/wiki/ISO_8601)形式に統一しようという風潮になっていますので従ったほうが無難です。
21
+ この日時を表す文字列は様々な形式を解釈しますが、今後は[ISO8601](https://ja.wikipedia.org/wiki/ISO_8601)形式に統一しようという風潮になっていますので従ったほうが無難です。
22
- > ISO 8601形式の時刻表記例
22
+ > ISO 8601形式の時刻表記例
23
- > 基本形式 20200501T201936+0900
23
+ > 基本形式 20200501T201936+0900
24
- > 拡張形式 2020-05-01T20:19:36+09:00
24
+ > 拡張形式 2020-05-01T20:19:36+09:00
25
-
25
+
26
- そして、日時処理の面倒くささを味わってから[Moment.js(GAS版)](https://tonari-it.com/gas-moment-js-moment/)というライブラリの導入を考えてみてください。
26
+ そして、日時処理の面倒くささを味わってから[Moment.js(GAS版)](https://tonari-it.com/gas-moment-js-moment/)というライブラリの導入を考えてみてください。
27
-
27
+
28
- 蛇足ですが、dodox86さんとのやりとりの中に、なぜ`start2`は`Sat Dec 30 1899 10:10:00 GMT+0900`なのかとありましたが、これはExcelの仕様(バグ)に合わせるため、シリアル値は「1899年12月30日午前0時」からの経過秒数としたそうです。
28
+ 蛇足ですが、dodox86さんとのやりとりの中に、なぜ`start2`は`Sat Dec 30 1899 10:10:00 GMT+0900`なのかとありましたが、これはExcelの仕様(バグ)に合わせるため、シリアル値は「1899年12月30日午前0時」からの経過秒数としたそうです。
29
- Excelでは1900年は閏年ではないのに「1900年2月29日」が存在します。
29
+ Excelでは1900年は閏年ではないのに「1900年2月29日」が存在します。
30
30
  [GoogleスプレッドシートとGoogle Apps Scriptの日付](https://stabucky.com/wp/archives/7442)