如何比较谷歌表格脚本中的时间戳?

问题描述 投票:0回答:1
var rawData = SpreadsheetApp.getActive().getSheetByName('Raw Data')
var opVolging = SpreadsheetApp.getActive().getSheetByName('Opvolging')

var d = new Date();
var timeStamp = d.getTime();

function onEdit(e) {
  var row = e.range.getRow()
  var column = e.range.getColumn()
  // Edit on Opvolging Tab 
  if (e.range.getSheet().getName() === 'Opvolging') {
    // If Dropdown 1 is edited
    if (e.range.getA1Notation() === 'A6') {

      //Color value selected from dropdown
      var dropDownColor = e.range.getValue();
      //Get current User Timestamp from used dropdown
      var userTime = opVolging.getRange(row,column+1).getValue();
      
      //action if dropdown 1 is changed
      opVolging.getRange("V17").setValue(opVolging.getRange(row,column+1).getA1Notation());
      getCorrectColor(userTime, dropDownColor);
    }
  }
}

function getCorrectColor(userTime, userColor){
  //find time in 2nd column starting from 2nd row to 100 
  var data = opVolging.getRange(2, 2, 100).getValues();
  data.forEach((val, index) => {
      var rawDataTime = new Date(val);
      Browser.msgBox(rawDataTime+' / '+userTime);
      if(rawDataTime.valueOf() == userTime.valueOf()){
          Browser.msgBox('SUCCES!!!');
          setCorrectColor(userTime, userColor);
      }               
  })
}

这就是我所拥有的,请记住我对此很陌生,所以我的代码会非常糟糕。 我试图比较两个时间戳,但即使两者都是相同的时间戳,但值却存在差异。知道为什么吗?

Function onEdit 中的时间戳代码 1

var userTime = opVolging.getRange(row,column+1).getValue();

函数 getCorrectColor 中的时间戳代码 2

var rawDataTime = new Date(val);

如果我在每个循环期间比较两者 这不起作用

if(rawDataTime == userTime){

我读过一些我需要使用的地方

if(rawDataTime.valueOf() == userTime.valueOf()){
然而,当比较两者时,尽管它们向我显示相同的日期时间,但它们的 valueOf 略有不同。

有没有一种方法可以对我的 foreach 进行可靠的比较?

尝试将

var rawDataTime = val;
设置为
var rawDataTime = new Date(val);
,因为否则无法将其识别为日期。

尝试使用和不使用

.valueOf()
都不起作用,尽管当我打印这些值时,两者都显示精确到秒的相同日期。

google-sheets foreach timestamp getvalue
1个回答
0
投票

您正在尝试比较两个相同的日期,但没有成功。

尝试使用此脚本(使用您自己的数据)作为比较日期的指南。


function debugDateMatch() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var opVolging = ss.getSheetByName('Opvolging')

  // Log the time zone of the script.
  var scriptTZ = Session.getScriptTimeZone()
  // Log the time zone of the spreadsheet.
  var ssTZ = ss.getSpreadsheetTimeZone()
  Logger.log("Time Zone: Script: "+scriptTZ+", spreadsheet: "+ssTZ)

  var b6Time = opVolging.getRange("B6").getValue()
  var b6newTime = new Date(b6Time)
  Logger.log("DEBUG: Value in cell B6: "+b6Time+", 'new Date(B6)': "+b6newTime+", b6 valueOf: "+b6Time.valueOf()+", 'new Date(B6)' valueOf:"+b6newTime.valueOf())

  // get the data in Column B
  var data = opVolging.getRange("B2:B6").getValues()
  //Logger.log(data) // DEBUG

  // loop through Column B values
  for (var i=0;i<data.length;i++){
    var colbnewTime = new Date(data[i][0])
    //Logger.log("i:"+i+", celltime"+data[i][0]+", newtime"+colbnewTime+", raw value: "+data[i][0].valueOf()+", newtime value:"+colbnewTime.valueOf())

    if (b6Time.valueOf()=== data[i][0].valueOf()){
      Logger.log("DEBUG: MATCH: Row#:"+(+i+2)+", cell value: "+data[i][0]+", 'new Date(cell value)': "+colbnewTime+", cell valueOf: "+data[i][0].valueOf()+", 'new Date(cell value)' valueOf: "+colbnewTime.valueOf())
    }else{
    Logger.log("DEBUG: NO MATCH: Row#:"+(+i+2)+", cell value: "+data[i][0]+", 'new Date(cell value)': "+colbnewTime+", cell valueOf: "+data[i][0].valueOf()+", 'new Date(cell value)' valueOf: "+colbnewTime.valueOf())
    }
  }
}

结果

DEBUG: NO MATCH: Row#:2, cell value: Wed Aug 23 2023 18:00:00 GMT-0700 (Pacific Daylight Time), 'new Date(cell value)': Wed Aug 23 2023 18:00:00 GMT-0700 (Pacific Daylight Time), cell valueOf: 1692838800000, 'new Date(cell value)' valueOf: 1692838800000
DEBUG: NO MATCH: Row#:3, cell value: Thu Aug 24 2023 15:09:38 GMT-0700 (Pacific Daylight Time), 'new Date(cell value)': Thu Aug 24 2023 15:09:38 GMT-0700 (Pacific Daylight Time), cell valueOf: 1692914978086, 'new Date(cell value)' valueOf: 1692914978086
DEBUG: NO MATCH: Row#:4, cell value: Thu Aug 24 2023 16:02:47 GMT-0700 (Pacific Daylight Time), 'new Date(cell value)': Thu Aug 24 2023 16:02:47 GMT-0700 (Pacific Daylight Time), cell valueOf: 1692918167206, 'new Date(cell value)' valueOf: 1692918167206
DEBUG: NO MATCH: Row#:5, cell value: Thu Aug 24 2023 16:03:41 GMT-0700 (Pacific Daylight Time), 'new Date(cell value)': Thu Aug 24 2023 16:03:41 GMT-0700 (Pacific Daylight Time), cell valueOf: 1692918221142, 'new Date(cell value)' valueOf: 1692918221142
DEBUG: MATCH: Row#:6, cell value: Thu Aug 24 2023 16:04:43 GMT-0700 (Pacific Daylight Time), 'new Date(cell value)': Thu Aug 24 2023 16:04:43 GMT-0700 (Pacific Daylight Time), cell valueOf: 1692918283797, 'new Date(cell value)' valueOf: 1692918283797

© www.soinside.com 2019 - 2024. All rights reserved.