9

How can I convert a time in the format "YYYY-MM-DD hh:mm:ss" (e.g. "2011-07-15 13:18:52") to a UNIX timestamp?

I tried this piece of Javascript code:

date = new Date("2011-07-15").getTime() / 1000
alert(date)

And it works, but it results in NaN when I add time('2011-07-15 13:18:52') to the input.

5 Answers 5

18

Use the long date constructor and specify all date/time components:

var match = '2011-07-15 13:18:52'.match(/^(\d+)-(\d+)-(\d+) (\d+)\:(\d+)\:(\d+)$/)
var date = new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6])
// ------------------------------------^^^
// month must be between 0 and 11, not 1 and 12
console.log(date);
console.log(date.getTime() / 1000);
Sign up to request clarification or add additional context in comments.

1 Comment

dude am getting the timestamp but its not the correct one am getting. when I give '2011-07-15 14:54:12' I get the timestamp as '1313434452'. But when I check this using 'onlineconversion.com/unix_time.htm' its shows the timestamp converted date to Mon, 15 Aug 2011 07:48:52 GMT which is wrong.
15

Following code will work for format YYYY-MM-DD hh:mm:ss:

function parse(dateAsString) {
    return new Date(dateAsString.replace(/-/g, '/'))
}

This code converts YYYY-MM-DD hh:mm:ss to YYYY/MM/DD hh:mm:ss that is easily parsed by Date constructor.

Comments

6

You've accepted an answer, but a much simpler regular expression can be used:

function stringToDate(s)  {
  s = s.split(/[-: ]/);
  return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]);
}

alert(stringToDate('2011-7-15 20:46:3'));

Of course the input string must be the correct format.

Comments

1

Months start from 0, unlike the days! So this will work perfectly (tested)

function dateToUnix(year, month, day, hour, minute, second) {
    return ((new Date(Date.UTC(year, month - 1, day, hour, minute, second))).getTime() / 1000.0);
}

Comments

-3

This returns number of milliseconds since Jan. 1st 1970: Date.parse('2011-07-15 10:05:20')

Just divide by 1000 to get seconds instead of milliseconds..

3 Comments

date = new Date.parse('2011-07-15 10:05:20')/ 100 is this what you ment... I am getting error NaN
console.log(Date.parse('2011-07-15 10:05:20')); is NaN, this is not a recognised input format.
Must vary from browser to browser, then. Tested it in Chrome, no problems (jsfiddle.net/nslr/v2xQ6)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.