2014-10-01 75 views
0

我目前使用表單來收集特定時間的數據。問題在於,它以24小時格式回來,儘管它以12小時的格式提出。 (即表格下午1點在Logger事件中顯示13:00)有沒有辦法將24小時轉換回12小時?我使用的代碼如下。從使用應用程序腳本的表單將24小時時間轉換爲12小時時間

function onFormSubmit(e) { 

    var submissionSSKey = 'WorkSheet ID'; 
    var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0]; 
    var lastRow = sheet.getLastRow(); 

    var PUStartTime = e.response.getItemResponses()[4].getResponse(); //Needs to be in 12-hour 
    var PUEndTime = e.response.getItemResponses()[5].getResponse(); //Needs to be in 12-hour 

    var joinedTimes = (PUStartTime + " - " + PUEndTime); //This is why I need 12-hour times 

    var targetRange = sheet.getRange(lastRow+1, 1, 1, 1).setValues([[joinedTimes]]); 
} 
+0

剛剛得到的響應值,如果它比12大務必從中減去12。 – 2014-10-01 17:36:31

+0

@IdoGreen使用Logger.log(PUEndTime - 12)會導致:[14-10-01 10:51:07:788 MST] NaN。可能是因爲13:00是不一樣的13.00 – ryano 2014-10-01 17:52:56

回答

1

下面是如何最終版本我正在完成這個。時間佈局可以利用這裏的例子來改變:Date and Time Preference reference

function onFormSubmit(e) { 

    var submissionSSKey = 'WorkSheet ID'; 
    var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0]; 
    var lastRow = sheet.getLastRow(); 

    //Get current time 
    var d = new Date(); 

    var PUStartTime = e.response.getItemResponses()[4].getResponse(); 
    var split = PUStartTime.split(":"); //Split the time submitted from user on Forms 
     var part1 = split[0]; 
     var part2 = split[1]; 
      d.setHours(part1) //Set the current hour to user submitted hours 
      d.setMinutes(part2) //Set the current minute to user submitted minutes 
    //Format the time to how we want it 
    var startTime = Utilities.formatDate(d, Session.getScriptTimeZone(), "h:mm a"); 


    var PUEndTime = e.response.getItemResponses()[5].getResponse(); 
    var split = PUEndTime.split(":"); //Split the time submitted from user on Forms 
     var part1 = split[0]; 
     var part2 = split[1]; 
      d.setHours(part1) //Set the current hour to user submitted hours 
      d.setMinutes(part2) //Set the current minute to user submitted minutes 
    //Format the time to how we want it 
    var endTime = Utilities.formatDate(d, Session.getScriptTimeZone(), "h:mm a"); 

    //Joining those new 12-hour times together 
    var joinedTimes = (startTime + " - " + endTime); 

    var targetRange = sheet.getRange(lastRow+1, 1, 1, 1).setValues([[joinedTimes]]); 
} 
+0

如果您的國家使用夏令時,則GMT + XX值的硬編碼時區是危險的,時間值將在冬季與夏季之間轉移。建議使用適合您需要的字符串國家/州值,因爲這會自動適應夏令時。 – 2014-10-01 21:55:54

+0

亞利桑那州(我在哪裏以及在哪裏使用表格)沒有遵守夏令時,所以我很幸運。 – ryano 2014-10-01 21:57:57

+0

哦,幸運的人:-),你沒有一個問題!!!順便說一句,我猜在亞利桑那州總是夏天? – 2014-10-01 22:02:11

2

如果您PUEndTime變量在日期格式,

也許嘗試使用formatDate()工具?

Google Documentation - Format Date

var endTime = Utilities.formatDate(PUEndTime, "GMT", "hh:mm a"); 

H =小時的AM/PM(1-12)

A = AM/PM標記

Date and Time patterns reference

+0

我得到一個「執行失敗:無法找到方法formatDate(字符串,字符串,字符串)」在執行日誌中。 – ryano 2014-10-01 18:46:16

+0

我猜這是至少有點錯誤的那些錯誤味精之一,因爲有一個formatDate方法。也許它畢竟不喜歡PUEndTime變量?爲了檢查這行代碼,你可以用'new Date()'替換PUEndTime,就像文檔中的例子一樣,看看會發生什麼。 – 2014-10-01 18:58:44

+1

使用'var endTime = Utilities.formatDate(新日期(PUEndTime),Session.getScriptTimeZone(),「hh:mm a」);' – 2014-10-01 19:03:53

相關問題