2017-10-10 4 views
0

私はGoogleのスプレッドシートを持っており、シートから日付を読み取ろうとしています。次のスクリプトは日付をStringとして返します。しかし、1日は少なすぎます。GoogleApps Utilities.formatDateが間違った日を返します

function testDate() { 
    var selectedSpreadsheetId = PropertiesService.getUserProperties().getProperty("spreadsheetId"); 
    var sheet = SpreadsheetApp.openById(selectedSpreadsheetId); 

    var rows = sheet.getDataRange(); 
    var values = rows.getValues(); 
    var row = values[0]; 
    var test = ""; 
    var test = Utilities.formatDate(new Date(row[0]), "GMT+1", "MM/dd/yyyy");  
    Logger.log("result is: "+test) 
} 

Googleスプレッドシートを作成し、左上のセルに14.10.2017の日付を入力する必要があります。この例で与えられた日付は、ドイツの日付形式です。ログ内の

結果は2017年10月13日ですが、私はGoogleが「通常」のJavaのSimpleDateFormat

なぜを使用していることを知っている2017年10月14日

すべきですか?

+0

これは、タイムゾーンの問題かもしれない関数に適切なタイムゾーンを渡します。 –

答えて

2

あなたの国で夏時間を使用しているため、タイムゾーンをハードコードするべきではありません。 あなたはあなたのコードに代わりまたはSpreadsheetApp.getActive().getSpreadsheetTimeZone()

Session.getScriptTimeZone()を使用することができ、それは以下のようになります:

var test = Utilities.formatDate(new Date(row[0]), Session.getScriptTimeZone(), "MM/dd/yyyy");  
    var test2 = Utilities.formatDate(new Date(row[0]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM/dd/yyyy");  
    Logger.log("result is: "+test) 
    Logger.log("result2 is: "+test2) 

enter image description here

+0

ありがとう!今それは動作します – user668338

関連する問題