0
function getFirstEmptyRow() {
  var spr = SpreadsheetApp.getActiveSpreadsheet();
  var column = spr.getRange('A:A');
  var values = column.getValues(); // get all data in one call
  var ct = 0;
  while ( values[ct][0] != "" ) {
    ct++;
  }
  return (ct);
}

function getLatestTime() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange(getFirstEmptyRow(),1).getValue();
}

function getLatestPoints() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange(getFirstEmptyRow(),2).getValue();
}

function getLatestAverage() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange(getFirstEmptyRow(),3).getValue();
}

function daysLeft(){
  var pointsLeft = 24250 - getLatestPoints();
  return  (pointsLeft / getLatestAverage()) / 24;
}

function nextRedeem() { //Problem is with this function:
  var redeemTime = getLatestTime() + daysLeft() + (2/24); 
  return redeemTime;
}

私のシートには、1) 日付/時刻、2) ポイント値、3) 1 時間あたりのポイントの移動平均の行のリストがあります。ポイントが特定の数に達するまでの残り時間を計算し、それを最新の時間に追加して、その数のポイントが予想される時間を計算する関数を作成しようとしています。

私はJavaスクリプトと弱いタイピングの経験がほとんどありません。私の問題は、返された日付値に数値を追加しようとすると、文字列または単に NaN を取得することです。私の他の問題は、シートが Number() とは異なる方法で日付を数値に解釈するように見えることです。

私の nextRedeem() 関数が単純に getLatestTime() を返す場合、日付または 1900 年 1 月 1 日からの日数またはそれが何であれ、それを表示するシートを取得できます。その時点で、セルに追加できます。セルに getLatestTime() と daysLeft() を追加すると、正常に機能します。タイムゾーンのオフセットを追加することもでき、それはセルで機能します。しかし、この関数でそれを行うと、何も機能しないようです。関数呼び出しに .value を追加して parseFloat() を使用しようとしましたが、NaN になります。

これらの関数の戻り値で算術演算を行うにはどうすればよいですか?

4

2 に答える 2

0

したがって、Date.parse は途中までしか到達しませんが、1970 年 1 月 1 日からのミリ秒が返されます。ここで、Google は 1899 年 12 月 30 日からの日数です。そのため、明確にするために計算せずに残した数学を使用する必要がありました。

function dateToNum(date) {
  return (Date.parse(date)/1000/60/60/24 + 25569)
}

dateToNum(getLatestTime())これで、好きな計算を使用して実行できます。この数値を日時にフォーマットされたセルに入れると、正しく表示されます。

于 2014-11-12T07:20:41.323 に答える
0

問題は、日付が JavaScript で処理される方法ではないということです。

var redeemTime = getLatestTime().setDate( getLatestTime().getDate() + daysLeft() + 12 );

これにより、DateTime オブジェクトの月の日が元の日付 + daysLeft() に設定されます。2/24 (常に 12 であるため) で何を指しているのかわかりませんが、他のコンテキストがある場合に備えて含めました。その月の日数を超える日を足すと翌月に入り、同様に0未満のマイナスの日数を足すと前月に入ります。

JavaScript で日付を処理する方法の詳細については、W3Schoolsのこのリンクを参照してください。

于 2014-11-11T08:43:50.503 に答える