回答編集履歴

1

patch -> diff

2022/05/30 21:03

投稿

aobaoba
aobaoba

スコア63

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