2015-01-09 58 views
0

我想要得到上個月的最後一天到5個月前,對應於ED1到ED5。Somewhere Apps腳本無法獲取本月的最後一天

如果我在setOriginalDate()中設置了某個月份,我希望它自動在月份的最後一天過去。 要獲得本月的最後一天,您必須爲下個月設置0天。

但是一些「ED」無法正常工作。當我爲setOriginalDate()設置Month「11」時,「ED2」(2個月前)推出「10」,而不是「9」。 有誰能告訴我爲什麼會發生這種情況?

function setOriginalDate(){ 
    var SD = new Date(); 
    SD.setFullYear(2014); 
    SD.setMonth(11); 
    SD.setDate(1); 
    SD.setHours(0); 
    SD.setMinutes(0); 
    SD.setSeconds(0); 
    return SD; 
    } 

function electiveEndDate(OriginalDate){ 

    var ED = setOriginalDate(); 
    ED.setMonth(ED.getMonth()+1);//開始日の翌月の0日目を指定(その月の最終日) 
    ED.setDate(0); 
    ED.setHours(23); 
    ED.setMinutes(59); 
    ED.setSeconds(59); 

    switch(OriginalDate){ 
    case 'ED': 
    return Utilities.formatDate(ED, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    break; 

    case 'ED1': 
    var ED1 = ED; 
    ED1.setMonth(ED.getMonth()); //1ヶ月前 現在の0日目を指定(前月の最終日) 
    ED1.setDate(0); 
    return Utilities.formatDate(ED1,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    break; 
    case 'ED2': 
    var ED2 = ED; 
    ED2.setMonth(ED.getMonth()-1); //2ヶ月前 
    ED2.setDate(0); 
    return Utilities.formatDate(ED2,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    break; 
    case 'ED3': 
    var ED3 = ED; 
    ED3.setMonth(ED.getMonth()-2); //3ヶ月前 
    ED3.setDate(0); 
    return Utilities.formatDate(ED3,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    case 'ED4': 
    var ED4 = ED; 
    ED4.setMonth(ED.getMonth()-3); //4ヶ月前 
    ED4.setDate(0); 
    return Utilities.formatDate(ED4,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    case 'ED5': 
    var ED5 = ED; 
    ED5.setMonth(ED.getMonth()-4); //5ヶ月前 
    ED5.setDate(0); 
    return Utilities.formatDate(ED5,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'yyyy-MM-dd'); 
    } 

} 
+0

腳本錯了,就是這個問題。您不能添加一個月,並期望它能在28,29,30,31天的月份內運行。 – epascarello

+0

爲什麼不設置每個月的第一天並減去1天。 – Jonathon

回答

0

爲什麼使用「setMonth()」和「的setDate()」是給你的結果,但是你可以很容易地在每種情況下實例化一個新的Date對象,並通過適當的值達到這個我不能說到構造函數。

function electiveEndDate(OriginalDate){ 
    var timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone(); 
    var ED = setOriginalDate(); 
    ED.setMonth(ED.getMonth()+1);//開始日の翌月の0日目を指定(その月の最終日) 
    ED.setDate(0); 
    ED.setHours(23); 
    ED.setMinutes(59); 
    ED.setSeconds(59); 

    switch(OriginalDate){ 
    case 'ED': 
     return Utilities.formatDate(ED, timezone, 'yyyy-MM-dd'); 
     break; 

    case 'ED1': 
     var ED1 = new Date(ED.getFullYear(),ED.getMonth(),0); 
     return Utilities.formatDate(ED1,timezone, 'yyyy-MM-dd'); 
     break; 
    case 'ED2': 
     var ED2 = new Date(ED.getFullYear(),ED.getMonth()-1,0); 
     return Utilities.formatDate(ED2,timezone, 'yyyy-MM-dd'); 
     break; 
    case 'ED3': 
     var ED3 = new Date(ED.getFullYear(),ED.getMonth()-2,0); 
     return Utilities.formatDate(ED3,timezone, 'yyyy-MM-dd'); 
    case 'ED4': 
     var ED4 = new Date(ED.getFullYear(),ED.getMonth()-3,0); 
     return Utilities.formatDate(ED4,timezone, 'yyyy-MM-dd'); 
    case 'ED5': 
     var ED5 = new Date(ED.getFullYear(),ED.getMonth()-4,0); 
     return Utilities.formatDate(ED5,timezone, 'yyyy-MM-dd'); 
    } 

} 
+0

謝謝!我真的不明白爲什麼setMonth()不起作用。 – Yuri

相關問題