4

I'm using google sheets javascript script where I'm looping over 15 min intervals each in their own column. I'm trying to find the column that matches the current hour/min so I can highlight it but can't get the javascript time checking to work.

time and nextTime are simply times like 8:00 or 8:15, so when I convert them to Date I get something like: Sat Dec 30 1899 08:00:00 GMT-0600 (CST)

Does getTime() consider the date part or just the time part? If I have a string for the date like "10/14/2017" how could I bring the 2 together for the date object?

var now = new Date().getTime();

  for(i in data[0]){
    var time = new Date(data[0][i]);
    var nextTime = new Date(data[0][Number(i) + 1]);

    var diff1 = time.getTime() - now;
    var diff2 = nextTime.getTime() - now;

    if(now >= time.getTime() && now < nextTime.getTime()){
      Logger.log(time);
    }
  }
4
  • 1
    I could probably give a long answer, but the best thing you can do here is use moment.js. Date objects in javascript sux, moment makes it easy to deal with
    – iagowp
    Commented Oct 14, 2017 at 16:25
  • look here - stackoverflow.com/a/16080662/6149665
    – ArtemSky
    Commented Oct 14, 2017 at 16:27
  • 1
    Always create Date object by using format var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); if you have less parameters then use var d = new Date(year, month, day, hours, minutes); because other formats may or may not work in all browsers. check link for reference w3schools.com/jsref/jsref_obj_date.asp Commented Oct 14, 2017 at 16:30
  • OK, I added a string for the current date I was interested in and built it form scratch. Kind of a pain but it works accept for I want to use 12 hour not 24 and it that if statement seems to fail at that.
    – user441521
    Commented Oct 14, 2017 at 17:53

1 Answer 1

5

The getTime() method returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.

This number is called a timestamp. e.g. 1508001790301. This number represents the total number of milliseconds (so it considers both the date part and the time part)

You can convert the string "10/14/2017" to a timestamp by passing it as a Date constructor argument and calling the getTime method on the newly created date object.

e.g. var nextTime = new Date('10/14/2017').getTime(); This will return the number of milliseconds that have passed since January 1970 till Oct 14 2017 00:00:00.

To bring everything together:

1) Get the current timestamp

var now = new Date().getTime(); // 1508001790301

2) Get the timestamps for time and nextTime

var time = new Date('10/14/2017').getTime(); 
var nextTime = new Date('10/15/2017').getTime();

3) Simply compare the values as you did already in the example

if(time <= now && now <= nextTime) {
      // Highlight the column
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.