2012-08-09 8 views
4

J'essaie d'obtenir une feuille de calcul avec des dates formatées simples lorsqu'un formulaire est soumis, mais toutes les dates, y compris l'horodatage, restent affichées sous la forme "Dec 31 1969 2:00 PM" ... Qu'est-ce que je fais mal? Toute aide serait grandement appréciée.Dates formatées dans un script Google Apps

function formSubmitReply(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = sheet.getActiveRange().getRowIndex(); 
    var lastRow = sheet.getLastRow(); 
    // Set the status of a new ticket to 'New'. 

    sheet.getRange(lastRow, getColIndexByName("Status")).setValue("New"); 

    var ticketTime = sheet.getRange(row, getColIndexByName("Timestamp")).getValue(); 

    var subdate = Utilities.formatDate(new Date(ticketTime), "GMT-10", "EEE MM/dd/yyyy 'at' h:mm a"); 
    sheet.getRange(lastRow, getColIndexByName("Timestamp")).setValue(subdate); 

    var sDate = sheet.getRange(row, getColIndexByName("Start Date")).getValue(); 
    var strtdate = Utilities.formatDate(new Date(sDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("Start Date")).setValue(strtdate); 

    var sTime = sheet.getRange(row, getColIndexByName("Start Time")).getValue(); 
    var strttime = Utilities.formatDate(new Date(sTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("Start Time")).setValue(strttime); 

    var eDate = sheet.getRange(row, getColIndexByName("End Date")).getValue(); 
    var enddate = Utilities.formatDate(new Date(eDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("End Date")).setValue(enddate); 

    var eTime = sheet.getRange(row, getColIndexByName("End Time")).getValue(); 
    var endtime = Utilities.formatDate(new Date(eTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("End Time")).setValue(endtime); 
} 

Répondre

3

Je pense que les « dates » dans votre feuille de calcul ne sont pas des objets de date, ils ne sont que des chaînes et JavaScript évaluer comme 0, c'est pourquoi vous obtenez une valeur de date de la « origine » (aka époque) moins GMT décalage ... selon la façon dont ces valeurs viennent dans les cellules, il pourrait y avoir différentes solutions à cela. Pouvez-vous montrer des exemples de données et dire comment ils ont été créés? Pour vérifier si ma conjecture est bonne, vous pouvez simplement essayer de changer le format d'affichage des cellules «date» en utilisant l'interface de feuille de calcul.Si vous pouvez le changer là-bas et obtenir des résultats cohérents alors je me trompe ... si pas ... eh bien, je suppose que je ne me trompe pas :-)

+0

Les dates dans les feuilles de calcul peuvent être traitées comme des objets js Date. Le problème est que lorsque les objets de date sont définis sur une feuille de calcul, l'objet est traité conformément à la mise en forme standard des documents pour les dates. Nous avons besoin d'un moyen de régler le format de date standard des documents. –

+0

Désolé mais ce que vous dites est tout simplement faux. Quand un script lit une date dans une feuille, la façon dont cette date est affichée dans la feuille de calcul est complètement hors de propos ... Je vous suggère d'essayer des choses avant de faire de telles affirmations –

+0

Je ne suis pas sûr de comprendre correctement ce que vous voulez dire .. Ce code fonctionne pour moi: var lastDate = sheet.setActiveCell ("B1"). GetValue(); Et donne une date js complète. –

1

Ce code prend la date de première ligne qui porte « Timestamp », à savoir le new Date ("TimeStamp") il est donc revenir la mauvaise date que le retour getRowIndex 1:

function formSubmitReply(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = sheet.getActiveRange().getRowIndex(); 
    //try to increment row as below to get row 2 
    row++; 
    var lastRow = sheet.getLastRow(); 
    //increment last row to write to new row to observe new date 
    lastRow++; 
    // Set the status of a new ticket to 'New'. 

    sheet.getRange(lastRow, getColIndexByName("Status")).setValue("New"); 

    var ticketTime = sheet.getRange(row, getColIndexByName("Timestamp")).getValue(); 

    var subdate = Utilities.formatDate(new Date(ticketTime), "GMT-10", "EEE MM/dd/yyyy 'at' h:mm a"); 
    //use log window select views-> logs to see your output 
    Logger.log("subdate : "+subdate); 
    sheet.getRange(lastRow, getColIndexByName("Timestamp")).setValue(subdate); 

    var sDate = sheet.getRange(row, getColIndexByName("Start Date")).getValue(); 
    var strtdate = Utilities.formatDate(new Date(sDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("Start Date")).setValue(strtdate); 

    var sTime = sheet.getRange(row, getColIndexByName("Start Time")).getValue(); 
    var strttime = Utilities.formatDate(new Date(sTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("Start Time")).setValue(strttime); 

    var eDate = sheet.getRange(row, getColIndexByName("End Date")).getValue(); 
    var enddate = Utilities.formatDate(new Date(eDate), "GMT-10", "EEE, MMM dd, yyyy"); 
    sheet.getRange(lastRow, getColIndexByName("End Date")).setValue(enddate); 

    var eTime = sheet.getRange(row, getColIndexByName("End Time")).getValue(); 
    var endtime = Utilities.formatDate(new Date(eTime), "GMT-10", "h:mm"); 
    //sheet.getRange(lastRow, getColIndexByName("End Time")).setValue(endtime); 
} 

//enter code here 
Questions connexes