質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

242閲覧

4桁の数字の変数を時刻として扱いたい。

taryo5678

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2025/03/29 11:02

実現したいこと

GASで4桁の変数を時刻として扱って、何時間前は何時かを計算してそれを再び4桁の数字として出力したいです。
例えば23時15分の2時間半前なら
2315→23:15→20:45→2045
別にここ過程を経なくても
2315→2045
になってくれればよいです。

発生している問題・分からないこと

具体的には、4桁の変数を時刻として扱う(2315→23:15)の部分をどうやるのかがわからず、その先に行けません。
よろしくお願いします。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

現在の日時などを取得する関数などは検索して出てきましたが、
目的となるようなものは見つかりませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Utilities.parseDateを使用すれば

javascript

1let time = Utilities.parseDate((`0000${timeint}`).slice(-4), 'JST', 'HHmm');

といった感じでDateクラスには出来るのですが標準のDateクラスでは日付や時間の計算が簡単に出来ないので外部のライブラリを使用したほうが簡単です。

Momentライブラリを使えば下記のようにできます。

javascript

1 // 時刻を数値として宣言 00:15の場合は15とすること 2 const timeint = 2315; 3 4 // 数字を0埋めして文字列としたものを確認 5 console.log(`0000${timeint}`.slice(-4)); 6 7 // 数字を0埋めして文字列とし、時分のフォーマットとして時間形式に変換 8 let work = Moment.moment((`0000${timeint}`).slice(-4),'HHmm'); 9 10 // 変換した時刻から2時間30分引く 11 let hour = 2; 12 let minute = 30; 13 let result = work.subtract({hours: hour, minutes: minute}); 14 15 // 求めた時刻をHHmmの形式で表示 16 console.log(result.format('HHmm'));

日をまたいだ場合も正しく計算されるかと思います。

投稿2025/03/31 00:58

編集2025/03/31 02:05
YAmaGNZ

総合スコア10540

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

GASは知らないので、考え方を
2315 ⇒ 23*60 + 15 ⇒ 1395
2時間半 ⇒ 2*60 + 30 ⇒ 150

1395 - 150 ⇒ 1245
1245/60 = 20、1245%60 = 45 ∴ 1245 ⇒ 2045

投稿2025/03/29 12:07

編集2025/03/29 13:01
winterboum

総合スコア23645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taryo5678

2025/03/29 12:35

2360 + 15 ⇒ 1395 260 + 30 ⇒ 150 はどのような過程でそうなっているのかわからないのですが教えていただけますか? よろしくお願いいたします。
melian

2025/03/29 12:51

アスタリスク(*)がイタリック書式として処理されてしまっています。本来は以下の様になっているはずです。 2315 ⇒ 23*60 + 15 ⇒ 1395 2時間半 ⇒ 2*60 + 30 ⇒ 150
winterboum

2025/03/29 13:00 編集

melian さんありがとうございます。そのとおりです。 シングルコーテーションつけるのサボってしまった。 回答編集します
taryo5678

2025/03/29 13:14

計算をする視点がなかったのでよかったです! 解決しました! ありがとうございました
winterboum

2025/03/29 23:30

解決おめでとうございます! 日をまたぐかも? のあたりは工夫してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問