Janusz Chudzynski
Janusz Chudzynski

Reputation: 2710

Date from string in format javascript google apps script

In my web app user needs to fill the fields like date and time. In date they can enter a date in a format: d/m/yy or dd/mm/yy (unfortunately I can't control how exactly user will enter it)

And they can also pick a time from the drop-down list: 08:00am,8.30am, 09:00am,.... , 05:00 pm

Now, I am trying to convert time and date strings it into a valid date object using function below, but I am getting "Date isInvalid Date" output. How should I proceed with it?

  var timeStartString ="1970/01/01 "+ "10:00am";
  var st1 =createDate("1/12/2013",timeStartString); 
  Logger.log("Date is"+st1);

 function createDate(dateString,timeString)
    {
      var eventDate  = new Date(dateString);
      var eventTime  = new Date(timeString)

      message +="Date String:"+dateString + " timeString "+timeString;

      eventTime.setFullYear(eventDate.getFullYear());
      eventTime.setDate(eventDate.getDate());
      eventTime.setMonth(eventDate.getMonth()); 

      return eventTime;
    }

Upvotes: 0

Views: 7272

Answers (2)

Eric Koleda
Eric Koleda

Reputation: 12673

You may want to look into using the Moment.js library, which makes date parsing and manipulation in JavaScript a bit easier. More information on how to use it in Apps Script here. If the date format is consistent, then you can use a custom format string to parse it.

var date = moment('1970/01/01 10:00am', 'YYYY/MM/DD HH:mma').toDate();

Upvotes: 4

Dusty
Dusty

Reputation: 643

The Date class won't recognize the time if am or pm is directly attatched to the time. For example new Date("1/12/2013 10:00am") will return Invalid Date, whereas new Date("1/12/2013 10:00 am") will return Sat Jan 12 2013 22:00:00. It's a subtle difference, but that's the way the parser is built. You shouldn't need the createDate method at all if you concatenate the date with the properly formatted time string.

Upvotes: 0

Related Questions