Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 如何使用谷歌应用程序脚本在谷歌电子表格中读取时间?_Time_Google Apps Script_Datetime Format - Fatal编程技术网

Time 如何使用谷歌应用程序脚本在谷歌电子表格中读取时间?

Time 如何使用谷歌应用程序脚本在谷歌电子表格中读取时间?,time,google-apps-script,datetime-format,Time,Google Apps Script,Datetime Format,在花了几个小时来确定一个合理的或解决方案之后,我的希望现在与这个社区在一起 我正在尝试获取(“读取”)用户在google spreasheet中输入的时间,并在google应用程序脚本中正确使用它,例如创建google日历事件 所需格式为“HH:mm” 我的出发点是上提供的google apps脚本示例 在本例中,我使用“”说明修改了spreasheet的参数(对不起,法语!): 我还更改了列“C”和“D”的显示格式,使其在初始示例中不显示AM/PM: Start Time End Time

在花了几个小时来确定一个合理的或解决方案之后,我的希望现在与这个社区在一起

我正在尝试获取(“读取”)用户在google spreasheet中输入的时间,并在google应用程序脚本中正确使用它,例如创建google日历事件

所需格式为“HH:mm”

我的出发点是上提供的google apps脚本示例

在本例中,我使用“”说明修改了spreasheet的参数(对不起,法语!):

我还更改了列“C”和“D”的显示格式,使其在初始示例中不显示AM/PM:

Start Time  End Time
13:00:00    14:55:00
13:00:00    14:55:00
...
为了在脚本编辑器中启用调试,我在setUpConference(第14行)的末尾删除了“3;”

我在debug中启动了脚本“setUpConference”,以检查从数据表读取的值。 我感到惊讶的是,第一条数据线

Ethics for monsters 5/15/2013   13:00:00    14:55:00    Rm 323: Minotaur's Labyrinth
变量“session”的对应数据

会话[2]
在脚本编辑器中显示为: 1899年12月30日星期六13:50:39 GMT+0100(CET)

我知道只有“时间”(HH:mm),日期是不完整的(所以是1899天),但如何获得时间“13:00:00”而不是这个奇怪的“13:50:39”

注:我的日历时区也是GMT+0100(CET)


包含更多信息的某些编辑:

  • 我用它来做测试
  • 我简化了我的谷歌应用程序脚本的代码,以关注这个问题(最初的代码是谷歌在

    /** *当电子表格打开时插入自定义菜单的特殊功能。 */ 函数onOpen(){ var菜单=[{name:'设置会议',functionName:'设置会议'}]; SpreadsheetApp.getActive().addMenu('会议',菜单); }

    /**
    *使用电子表格中的会议数据创建
    *Google日历事件、Google表单和允许脚本的触发器
    *作出反应以形成反应。
    */
    功能设置会议(){
    /*if(ScriptProperties.getProperty('calId')){
    Browser.msgBox('您的会议已经设置好。请在Google Drive中查找!');
    }*/
    var ss=SpreadsheetApp.getActive();
    var sheet=ss.getSheetByName(“会议设置”);
    var range=sheet.getDataRange();
    var values=range.getValues();
    设置日历(值、范围);
    }
    /**
    *创建一个Google日历,其中包含中每个会议会话的事件
    *电子表格,然后将事件ID写入电子表格以供将来使用。
    *
    *@param{String[][]}值电子表格范围的单元格值。
    *@param{Range}Range包含会议数据的电子表格范围。
    */
    功能设置日历(值、范围){
    //用于调试的注释cal
    //var cal=CalendarApp.createCalendar(“测试会议日历”);
    对于(变量i=1;i

正如一些评论表中所链接的那样,JS使用不同的日期纪元,它们并不总是玩得很好

var values=range.getValues();
更改为
var values=range.getDisplayValues();

这将迫使它将单元格值作为字符串抓取

按以下方式更改日期联接函数将使其能够处理字符串(可能需要确保电子表格中的日期具有前导零):


请看一看您是否可以分享(1)电子表格中存在的时间值,(2)用于访问该值的确切代码,以及(3)用于显示“Sat Dec 30 1899 13:50:39 GMT+0100(CET)”的代码?感谢Casper&Diego的关注和初步回答。我正在编辑我的初始问题以添加元素。@Casper我尝试使用
实用程序.formatDate()
格式化,但数据似乎已经不是我在脚本中等待的数据:((“C2中的13:00:00”被脚本视为“13:50:39”)@Diego回答您的观点:(1)13:00:00(2)描述中更新的代码(3)“Sat Dec 30 1899 13:50:39 GMT+0100(CET)”是调试模式下在线脚本编辑器中的数据,我还添加了Logger.log输出:'[]I=1-会话[2]=Sat Dec 30 1899 13:50:39 GMT+0100(CET)|会话[3]=Sat Dec 30 1899 15:45:39 GMT+0100(CET)[]formattedHour=13:50'看看这篇文章,这也是我问题的完美答案。非常感谢Jared!让我疯狂的是,最初的代码取自谷歌官方教程:!
["Ethics for monsters", (new Date(1368568800000)), (new Date(-2209115361000)), (new Date(-2209108461000)), "Rm 323: Minotaur's Labyrinth"]
/**
 * A set-up function that uses the conference data in the spreadsheet to create
 * Google Calendar events, a Google Form, and a trigger that allows the script
 * to react to form responses.
 */
function setUpConference() {
  /*  if (ScriptProperties.getProperty('calId')) {
    Browser.msgBox('Your conference is already set up. Look in Google Drive!');
  }*/
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Conference Setup');
  var range = sheet.getDataRange();
  var values = range.getValues();
  setUpCalendar(values, range);
}

/**
 * Creates a Google Calendar with events for each conference session in the
 * spreadsheet, then writes the event IDs to the spreadsheet for future use.
 *
 * @param {String[][]} values Cell values for the spreadsheet range.
 * @param {Range} range A spreadsheet range that contains conference data.
 */
function setUpCalendar(values, range) {
  // comment cal for debug
  //var cal = CalendarApp.createCalendar('Test Conference Calendar');
  for (var i = 1; i < values.length; i++) {
    var session = values[i];
    var title = session[0];
    Logger.log("i= "+i+" - "+ "session[2]= " + session[2] + " | session[3] =" + session[3] );

    // This formats the date as Greenwich Mean Time in the format
    // year-month-dateThour-minute-second.
    var formattedHour = Utilities.formatDate(session[2], "GMT+1", "HH:mm");
    Logger.log("formattedHour = "+formattedHour);

    var start = joinDateAndTime(session[1], session[2]);
    var end = joinDateAndTime(session[1], session[3]);
    var options = {location: session[4], sendInvites: true};
    // comment cal and event creation
    /*var event = cal.createEvent(title, start, end, options)
        .setGuestsCanSeeGuests(false);
    session[5] = event.getId();*/
  }
  range.setValues(values);
}

/**
 * Creates a single Date object from separate date and time cells.
 *
 * @param {Date} date A Date object from which to extract the date.
 * @param {Date} time A Date object from which to extract the time.
 * @return {Date} A Date object representing the combined date and time.
 */
function joinDateAndTime(date, time) {
  date = new Date(date);
  date.setHours(time.getHours());
  date.setMinutes(time.getMinutes());
  return date;
}
function joinDateAndTime(date, time) {
  var t = new Date(date);
  t.setHours(parseInt(time.substring(0, 2)));
  t.setMinutes(parseInt(time.substring(3, 5)));
  return t;
}