仅在1920年时区改变时比较时间

时间:2018-04-11 17:19:10

标签: javascript google-apps-script google-sheets

我的时间价值是"早上7:00:00"在我的电子表格中。假设我想在我的Google Apps脚本代码中将其与另一小时/分钟时间值(与日期无关)进行比较。当脚本读取值时,由于没有附加日期,因此它假定日期为18-Dec-1899。现在,问题是,因为我当前的时区是GMT+06:42:04 back in 1899,时间值显示为" 07:17:56"。

如何将此时间与其他时间进行比较以了解小时和分钟是否匹配?理想情况下,这可以使用vanilla JS(即我不想使用Moment.js)。

function getCellValue() {
  var cellValue = SpreadsheetApp.getActiveSheet().getRange("A1").getValue();
  Logger.log(cellValue); // Sat Dec 30 07:00:00 GMT+06:42 1899
  Logger.log(cellValue.getHours()); // 7.0
  Logger.log(cellValue.getMinutes()); // 17.0
  Logger.log("Untouched: " + cellValue); // Untouched: Sat Dec 30 1899 07:17:56 GMT+0700 (ICT)
  var formattedTime = Utilities.formatDate(cellValue, "GMT+7", "EEE MMM dd yyyy HH:mm z");
  Logger.log("Formatted: " + formattedTime); // Formatted: Sat Dec 30 1899 07:17 GMT+07:00
  var updatedCellValue = new Date(cellValue.setFullYear(2018));
  Logger.log("New Year: " + updatedCellValue); // New Year: Sun Dec 30 2018 07:17:56 GMT+0700 (ICT)
  var updatedDate = new Date(cellValue);
  Logger.log("Converted: " + updatedDate); // Converted: Sat Dec 30 1899 07:17:56 GMT+0700 (ICT)
  Logger.log("Converted & formatted: " + Utilities.formatDate(updatedDate, "GMT+7", "EEE MMM dd yyyy HH:mm z")); // Converted & formatted: Sat Dec 30 1899 07:17 GMT+07:00
}

enter image description here

我的电子表格和脚本都设置为"(GMT + 07:00)曼谷"时区。

(据我所知,今天上午7点和1899年上午7点不一样,但这与这个假设无关。如果用户在电子表格中输入早上7点,他们可能意味着本世纪早上7点。)

1 个答案:

答案 0 :(得分:0)

  1. getDisplayValue(),而不是getValue()
  2. 从值
  3. 创建一个新的Date对象
  4. 使用Utilities.formatDate()获取小时和时间分钟
  5. 固定代码:

    function getCellValue() {
      var cellValue = SpreadsheetApp.getActiveSheet().getRange("A1").getDisplayValue();
      Logger.log(cellValue); // 7:00:00 AM (or 0.29, if formatted as number)
      cellValue = new Date(cellValue);
      var hours = Utilities.formatDate(cellValue, "GMT+7", "HH");
      var minutes = Utilities.formatDate(cellValue, "GMT+7", "mm");
      Logger.log (hours + ":" + minutes); // 07:00
    }