11

I am new to GAS (actually new to coding too) I got a date string in the format of yyyymmdd (eg. 20140807), how could I turn it to date so that Google apps script can recognize it and later I can do some calculation (mostly to compare with Today as in var today = new Date();)

Google apps script can't recognize the following correctly:

// string is in the format of yyyymmdd (eg. 20140807)
var pubdate = new Date(string)
rink.attendant.6
  • 40,889
  • 58
  • 100
  • 149
user3595556
  • 125
  • 1
  • 2
  • 6

6 Answers6

16

The only way - parse the string by hand:

var dateStr = "20140807"

var year = +dateStr.substring(0, 4)
var month = +dateStr.substring(4, 6)
var day = +dateStr.substring(6, 8)

var pubdate = new Date(year, month - 1, day)

The reason for month - 1 is that the month numeration starts from 0.

And the + sign before function just converts string, which is returned by functions, to numbers so we can pass them right into new Date()

Vyacheslav Pukhanov
  • 1,598
  • 1
  • 16
  • 28
  • @user3595556 then mark my answer as correct (by clicking the tick under the downvote button), so other users could see it was helpful – Vyacheslav Pukhanov Aug 07 '14 at 09:56
  • @user3595556 also read [THIS](http://stackoverflow.com/tour) to understand better how does StackOverflow work. BTW, welcome to SO! – Vyacheslav Pukhanov Aug 07 '14 at 13:44
  • 1
    Thank you. At first, I actually tried to upvote it but I was not allowed to because my account is new. I didn't realise there is a "tick" sign. SO is really an exciting place. – user3595556 Aug 08 '14 at 04:02
  • How do I convert a date string with minutes and hours to new Date? – Code Guy Apr 03 '17 at 04:36
9

You can use moment.js to parse a string of date in GAS.

First you need to add moment.js to your GAS. In script editor, go to "Resources" then "Libraries...", then put this project key MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 and click "Add". Choose the version from the dropdown, then click "Save".

Parsing date with moment is as easy as this.

var momentDate = Moment.moment("20140807", "YYYY/MM/DD");

What's returned here is a moment object, which is a wrapper of JavaScript's native Date object and very handy for date manipulation .

But, if you still need to get JavaScript's Date object, you can get it like this;

var date = momentDate.toDate();

You can also create formatted date time string with moment.js. Here is the reference for the tokens to specify format.

kanji
  • 689
  • 9
  • 12
3

Be careful to pick the right timezone! In my example its

  • "+01:00 " => GMT+1 = Berlin (without daylight saving).

Other possible options

  • ".000000000Z" = "+00:00" => UTC = GMT = Unix Time
  • "-05:00" => EST = New York/ America
let date = "2021-03-10"
let time = "10:03:00"
let offset_to_utc = "+01:00"
let new_date_object = new Date(date + "T" + time + offset_to_utc)
Valentin
  • 79
  • 1
  • 5
0

Thnx to Vyacheslav Pukhanov, I could solve my problem and answer the question of Code Guy in the comments. Excuse me for the names of vars are in Dutch ;)

function DatumStringNaarDatumWaarde(datumString){   
/* @param datumString: can be passed in by another function in your code
   If not provided, this function uses an example as returned by a stockQuoting RESTserver:
*/
 if(!datumString) datumString = "2017-04-25T09:10:00.000000000Z";   
 //--- parsing the string; datevalues   
 var splits      = datumString.split("T")
 var datumSplits = splits[0].split("-")
 var dd   = Number(datumSplits[2]);
 var MM   = Number(datumSplits[1])-1;
 var yyyy = Number(datumSplits[0]);   
 //---parsing the string; time values
 var tijd      = splits[1].split(":00.000000000Z")
 var minuutUur = tijd[0].split(":")
 var uur    = Number(minuutUur[0]);
 var minuut = Number(minuutUur[1]);
 //--- constructing dateValue, with possibilty to be formatted by Utilties             
 var datumWaarde = new Date(yyyy,MM,dd,uur,minuut);
 var werkDatum = Utilities.formatDate(new Date(datumWaarde), "GMT+2", "dd-MM-yyyy HH:mm")
 return(datumWaarde)
 }
0

This worked for me.

function dateFromString(dateString){
    if(!dateString) 
        dateString = "2020-06-05T09:10:00.000000000Z";
    var dateValue = new Date(dateString);
    return dateValue;
}
David Buck
  • 3,594
  • 33
  • 29
  • 34
0

Maybe this help... From a google form, a Date submitted in text, convert to a valid Date in script:

function ddmmyyy() {
   var date = new Date('6/15/1974');
   var dd = date.getDate();
   var mm = date.getMonth()+1;
   var yyyy = date.getFullYear();

}