Показать календарь событий на этой неделе - PullRequest
1 голос
/ 09 октября 2019

У меня есть хорошая функция, которая показывает все события в моем календаре на этот месяц, но я не могу понять, как изменить это на эту неделю (с понедельника по воскресенье).

Я могу изменить список, изменив дату на сегодняшнюю и добавив, например, дни. Я попробовал некоторые вещи с Utilities.formatDate, но это дает мне номера недели, без дат. Я понятия не имею, как получить текущую неделю.

function listEvents2() {
  var date = new Date();
  var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
  var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  var events2 = CalendarApp.getDefaultCalendar().getEvents(firstDay, lastDay);

  var data2 = [];
  data2.push("Deze maand: ");
  if (events2 && events2.length > 0) {
    for (i = 0; i < events2.length; i++) {
      data2.push(events2[i].getTitle()+' : '+Utilities.formatDate(events2[i].getStartTime(),Session.getScriptTimeZone(),"dd MMMM HH:mm")+' - '+Utilities.formatDate(events2[i].getEndTime(),Session.getScriptTimeZone(),"HH:mm"))
    }
    return data2;
  }
  else {
    return ['No events found','',''];
  }
}

Мне бы хотелось несколько советов, как этого добиться.

Редактировать: Может быть, мне нужно объяснить больше. Эта функция используется для персональной панели планирования недельного планирования с помощью HtmlService. Есть еще одна функция, которая выдает список сегодняшних событий.

Редактировать 2: Вот мой рабочий код:

function email() {


  var date = new Date();
  var day = date.getDay();
  var firstDay = new Date(date.getFullYear(), date.getMonth(), date.getDate()-day+1);
  var lastDay = new Date(date.getFullYear(), date.getMonth(), date.getDate()-day+8);
  var events2 = CalendarApp.getCalendarById(CalendarID).getEvents(firstDay, lastDay);

  var data2 = [];
  data2.push("<b>Title</b>");
  if (events2 && events2.length > 0) {
    for (i = 0; i < events2.length; i++) {
      data2.push(Utilities.formatDate(events2[i].getStartTime(),Session.getScriptTimeZone(),"EEEE dd/MM")+ ' ' + Utilities.formatDate(events2[i].getStartTime(),Session.getScriptTimeZone(),"HH:mm") +'<br/>'+events2[i].getTitle())
    }

    return data2;
  } else {
    return ['Nothing to do'];
  }
}

Я решил разделить списки по календарю, чтобы сделать его более организованным. Но оба ответа ниже работают.

Есть еще две вещи, которые мне нужно выяснить. Во-первых, я могу заставить

Session.getScriptTimeZone(),"EEEE dd/MM")

показывать EEEE на своем родном языке вместо английского.

Другое - то, что функция дает идеальный список действий, но пропускает пустые дни. Я хотел бы отобразить пустые дни, так как панель должна функционировать как планировщик представления календаря.

Спасибо за помощь!

1 Ответ

0 голосов
/ 09 октября 2019

Вы можете найти этот связанный вопрос полезным. Это поможет вам получить понедельник (который можно изменить на воскресенье, если вы хотите, чтобы ваши недели работали с воскресенья по субботу).

Вы можете использовать его как firstDay, а затем lastDay через 6 дней. чем это, так что-то вроде:

var lastDay = new Date(firstDay.setDate(firstDay.getDate() + 6))

Имейте в виду, что в Javascript метод .getDay() возвращает 0, если это воскресенье, и 1, если это понедельник [0]. Аналогично с месяцами январь равен 0, февраль равен 1 и т. Д. [1]

[0] https://www.w3schools.com/jsref/jsref_getday.asp

[1] https://www.w3schools.com/jsref/jsref_getmonth.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...