Google 스프레드 시트의 날짜를 Google Apps Script와 비교하면 부정확 한 부울 값이 반환됩니다.

테일러 페이지

내 Google 스프레드 시트에는 내일 날짜와 비교하려는 약속 목록이 있습니다 (전날 알림을 보낼 수 있도록). 내 현재 코드는 스프레드 시트에없는 특정 날짜에 true를 반환합니다. 우리는 일요일에 약속이 없으며 현재 토요일에 이것을 테스트하고 있지만 여전히 진정한 가치를 받고 있습니다. 가능한 예약 실수가 있는지 스프레드 시트를 철저히 검색했지만 아무것도 없습니다. 그러나 날짜 4 : 24 : 2016 (내일)을 찾을 때 4 : 14 : 2016 날짜에 true를 반환한다는 것을 알았습니다. 나는이 시점에서 꽤 당황 스러웠다.

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var apptDates = sheet.getRange(2, 32, sheet.getLastRow() - 1, 1).getValues();

  for (var i = 0; i <= apptDates.length; i++) {
    var apptDate = new Date(apptDates[i][0]);
    apptDate = apptDate.addHours(74);

    function dayAway(date, day) {
      return new Date(date.getTime() + day * (24 * 3600 * 1000));
    }
    Logger.log(apptDate >= dayAway(new Date(), 1));
  }
}
Serge insas

당신이 사용하는 경우 new Date()는 전체 얻을 JS 날짜 객체일, 월, 연도뿐만 아니라 시간 분, 초 및 밀리 초 .

그렇기 때문에 비교 결과를 얻을 수 없습니다. 불필요한 값을로 설정 0하면 작동합니다. getTime()밀리 초를 비교 하는 데 사용 했지만 사용할 수도 있었지만 toString()날짜 개체 만 동등성을 확인하는 데 적합하지 않습니다.

Logger는 이러한 문제를 디버깅하는 데 큰 도움이됩니다.

코드 :

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var apptDates = sheet.getRange(2,6, sheet.getLastRow() - 1, 1).getValues();
  for (var i = 0; i < apptDates.length; i++) {
    var apptDate = new Date(apptDates[i][0]);
    Logger.log(apptDate.getTime()+'  ==?  '+dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
    Logger.log(apptDate.getTime() == dayAway(new Date(new Date().setHours(0,0,0,0)), 1).getTime());
  }
}

function dayAway(date, day) {
  return new Date(date.getTime() + day * 24 * 3600 * 1000);
}

여기에 이미지 설명 입력 여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관