0

私の同僚は、ワークフローを自動化するための Google Apps スクリプトを作成しました (ホテルでの部屋代請求の承認)。概して、スクリプトは期待どおりに機能しているようです。スクリプトには、自動化されたスケジュール (イベント駆動ではなく時間ベース) で実行される機能があります。チェックイン日が1日ずれて予約エラーになった事例が数件あります。残念ながら、すべてのリクエストで発生するわけではありません。リクエストを行うすべての関連ユーザーは、同じタイムゾーン (EST) にいます。

たとえば、10/22 のチェックイン日と 10/23 のチェックアウト日で要求が送信されたが、スクリプトが実行され、送信者が承認の通知を受信すると、チェックインが行われるというインシデントを見てきました。日付が 10/21 に変更され、チェックアウトが 10/22 に変更されました。

HTML メールの関連部分は、スプレッドシートの行から値を取得するだけです: + "

" + "Est チェックイン日: " + Utilities.formatDate(row.arrivalDate, "EST", "MM-dd-yyyy") + "

" + "Est チェックアウト日: " + Utilities.formatDate(row.departureDate, "EST", "MM-dd-yyyy")

この動作の原因は何ですか? これは、コードが実行される特定の Google サーバーの時間が原因でしょうか?

4

3 に答える 3

3

スプレッドシートのタイムゾーン( [ファイル]> [スプレッドシートの設定]にあります)とスクリプトプロジェクトのタイムゾーン([ファイル]> [プロジェクトのプロパティ]にあります)の両方が正しく設定されていることを確認してください。スプレッドシートのタイムゾーンは、セルから日付/時刻の値を読み取る方法を制御します。 、スクリプトのタイムゾーンは、新しいDateオブジェクト、トリガーなどのデフォルトを制御します。

于 2012-05-29T19:22:17.773 に答える
2

私の経験からすると、特にデータが切り替え期間に提出された場合、EST と EDT の混同の結果である可能性があります。例を挙げてみましょう: 冬時間 (EDT) にいて、EST の日付のリクエストを送信するとします。スクリプトで日付を強制的に EST にすると、EDT の日付が誤解されます。時間の設定方法によっては、日勤になる場合があります。問題を根本的に解決するために私がしたことは、Utilities.formatDate() の使用中に現在の夏/冬の時間を考慮に入れることです。ここで私が使用するコードスニペットを試してみてください: (私はヨーロッパにいるので値は異なりますが、原則は同じです)

  var FUS1=new Date().toString().substr(25,8);// FUS1 gets the GMT+0200 or GMT+0100 string
// Fri Sep 24 2010 10:00:00 GMT+0200 (CEST) for example
  if (FUS1!="GMT+0200"){FUS1="GMT+0100"};// and takes care of summer time !
  var today=Utilities.formatDate(new Date(),FUS1,"dd-MM-yyyy")+" à "+Utilities.formatDate(new Date(),FUS1,"HH:mm")

完全な説明については、私がずっと前に提起したこの問題を見ることができますが、これは実際には問題ではありませんでした;-)

于 2012-05-25T16:08:31.567 に答える
1

私は同様の問題を抱えていましたが、MM/dd/yyy の形式で日付を入力したことが問題でした。スプレッドシートから電子メールに投稿する日付を取得すると、常に 1 日少なくなります。

私は東部時間 (GMT-5:00) にいます。プロジェクトのプロパティとスプレッドシートの設定が正しいことを確認しました。さらに深く掘り下げた後、フォームに入力され、スプレッドシートに表示された日付は 2012 年 7 月 27 日でしたが、スプレッドシートの実際の日付は次のとおりであることに気付きました。

2012 年 7 月 26 日木曜日 21:00:00 PDT

2012 年 7 月 27 日 00:00:00 東部標準時 (GMT-5:00) は PDT で 3 時間前日になるため、これは「ある程度」理にかなっています。日付GMTを単純にフォーマットしました。私はそれを EDT にフォーマットすることができ、常に機能していたはずですが、GMT をハードコーディングすることで、季節の変化に応じてコードを変更する必要があるかどうか、コードを読んでいる誰かが推測する必要がなくなりました。日付だけが必要でした。

問題を処理するより「雄弁な」方法として、この投稿の FUS1 の例を (今のところコメントとして) コピーして貼り付けました。ありがとう!

于 2012-07-21T21:10:42.377 に答える