Google Script / JavaScript在时区之间转换时间

时间:2017-03-05 20:20:13

标签: javascript datetime google-apps-script timezone google-calendar-api

我经常旅行,而且我经常有约会(例如航班)从一个时区开始到另一个时区结束。我需要知道每个事件开始和结束的本地时间和UTC时间。

我使用Google日历并在日历活动中指定不同的开始和结束时区。

我编写了一个脚本,可以在一段时间内完成我的议程,在我当地时间显示所有内容,这很好。

我很难获得当地时间。

当我检索事件时,时间显示在我当地时间。

我可以使用欧洲/罗马等格式检索时区,但这无助于我显示当地时间。

附件是我日历中条目的屏幕截图:

Google Calendar Screenshot

以下是从我的脚本中看到事件的方式(取自日志文件):

Start: 2017-03-29T16:35:00+01:00, startTimeZone: Europe/Berlin.
End: 2017-03-29T22:30:00+01:00, endTimeZone: Asia/Qatar

这些时间应分别为开始时间:17:35和结束时间:00:30。

有没有人对如何获得当地时间或在时区之间转换有任何想法?

2 个答案:

答案 0 :(得分:1)

希望这对你有帮助。

function timezones()
{
  var today = new Date();
  var hour = 3600000;
  var tz = '';
  today = new Date(today.getTime() + (13 * hour));
  var s = '<div id="mydiv">';
  for(var i = 12;  i >= -11; i--)
  {
    if(i > 0){ tz = 'GMT+' + i;}
    if(i == 0){tz = 'GMT';}
    if(i < 0){tz = 'GMT' + i;}
    today = new Date(today.getTime() - hour);
    s += '<div class="myDates">' + Utilities.formatDate(today,"GMT", "'Date:'yyyy-MM-dd' Time:'HH:mm:ss") + 'TimeZone; "' + tz + '"</div>';
  }
  s += '</div>';
  dispStatus('Timezones', s);
}

这是我使用的显示例程。

function dispStatus(title,html,width,height,modal)
{
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 400;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var modal = typeof(modal) !== 'undefined' ? modal : false;
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
 if(!modal)
 {
   SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
 }
 else
 {
   SpreadsheetApp.getUi().showModalDialog(htmlOutput, title);
 }
} 

here是时区地图。

答案 1 :(得分:0)

<h1>Calendar Play</h1>
function calendarTesting()
    {

  var rngA = CalendarApp.getAllOwnedCalendars();
  var s='';
  for(var i = 0;i < rngA.length; i++)
  {
    s += '<div id="Cal' + i + '"><Strong>Name: </strong>' + rngA[i].getName();
    s += '<br /><strong>Color: </strong><span style="color:'+ 'black' +';">' + rngA[i].getColor() + '</span>';
    s += '<br /><strong>Description: </strong>' + rngA[i].getDescription();
    var pri = (rngA[i].isMyPrimaryCalendar())? 'Yes': 'No';
    s += '<br /><strong>IsMyPrimaryCalender: </strong>' + pri + '</div>';
    s += '<style>#Cal'+ i +'{background-color:'+ rngA[i].getColor() +';padding:10px;}</style>';

  }
  var now = new Date();
  var ForWeeksFromNow = new Date(now.getTime() + (28 * 24 * 60 * 60 * 1000));
  var events = CalendarApp.getDefaultCalendar().getEvents(now,ForWeeksFromNow);
  for(var j = 0; j < events.length; j++)
  {
    s+= '<div style="border:1px solid black;padding:10px 50px 10px 10px;">';
    s += '<div style="float:right;font-size:48px;">' + Utilities.formatDate(events[j].getStartTime(),"GMT-7", "E") + '</div>';
    s += '<br /><strong>Title: </strong>' + events[j].getTitle();
    s += '<br /><strong>Start: </strong>' + Utilities.formatDate(events[j].getStartTime(),"GMT-7", "MMM dd HH:mm");
    s += '<br /><strong>End: </strong>' + Utilities.formatDate(events[j].getEndTime(), "GMT-7", "MMM dd HH:mm");
    s += '<div style="float:right;font-size:12px;">' + events[j].getDescription() + '</div>';
    s += '</div>';

  }
  s += '<br /><br /><input type="button" value="Exit" onClick="google.script.host.close();" />';
  var title = 'Calendar for: ' + Utilities.formatDate(now, "GMT-7", "E MMM dd, yyyy");
  dispStatus(title, '<p>' + s + '</p>',600,500);
}

function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 250;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
  SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
}