4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スプレッドシートに書かれた日付が「表示形式」によってGASの中で型が変わる調査

Last updated at Posted at 2019-06-19

(2020/03/21 追記)
2020年2月に GASで V8ランタイム が使えるようになりました。これによりECMAScriptに対応をしたようです。それまでは Rhinoランタイム だったそうです。この記事を投稿したときは Rhinoランタイム でしたが、下記の記事は V8ランタイム でも同じ結果になりました。


下記のようなスプレッドシートがあって、列によって「表示形式」が異なります。

ss.png

function main(){
  const sheet   = SpreadsheetApp.getActiveSheet();
  
  const jidou   = sheet.getRange('A2').getValue();
  const hiduke  = sheet.getRange('B2').getValue();
  const nichiji = sheet.getRange('C2').getValue();
  const nashi   = sheet.getRange('D2').getValue();
  
  // typeofで判定
  Logger.log(typeof jidou); // -> object
  Logger.log(typeof hiduke); // -> object
  Logger.log(typeof nichiji); // -> object
  Logger.log(typeof nashi); // -> string
  
  // Object.prototype.toString.call()で判定
  Logger.log(Object.prototype.toString.call(jidou)); // -> [object Date]
  Logger.log(Object.prototype.toString.call(hiduke)); // -> [object Date]
  Logger.log(Object.prototype.toString.call(nichiji)); // -> [object Date]
  Logger.log(Object.prototype.toString.call(nashi)); // -> [object String]
}

表示形式が「書式なしテキスト」だと、GASの中ではStringになりました。
GAS側でDateオブジェクトとして扱ってる場合、スプレッドシート側の表示形式をいじられると困ることになるかも?

2023/10/30追記
コメントにて getDisplayValue(s)を使う技を教えていただきましたのでそちらも参照してください!

4
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?