I need to change a date/time from 2014-08-20 15:30:00 to look like 08/20/2014 3:30 pm

Can this be done using javascript's Date object?

2

5 Answers

Yes, you can use the native javascript Date() object and its methods.

For instance you can create a function like:

function formatDate(date) { var hours = date.getHours(); var minutes = date.getMinutes(); var ampm = hours >= 12 ? 'pm' : 'am'; hours = hours % 12; hours = hours ? hours : 12; // the hour '0' should be '12' minutes = minutes < 10 ? '0'+minutes : minutes; var strTime = hours + ':' + minutes + ' ' + ampm; return (date.getMonth()+1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + strTime; } var d = new Date(); var e = formatDate(d); alert(e); 

And display also the am / pm and the correct time.

Remember to use getFullYear() method and not getYear() because it has been deprecated.

DEMO

4

Please do not reinvent the wheel. There are many open-source and COTS solutions that already exist to solve this problem.

Please take a look at the following JavaScript libraries:


Demo

Update: I wrote a one-liner using Moment.js Luxon below.

const { DateTime } = luxon; const value = DateTime .fromFormat("2014-08-20 15:30:00", "yyyy-MM-dd HH:mm:ss") .toFormat('MM/dd/yyyy h:mm a'); console.log(value); // 08/20/2014 3:30 PM
<script src=""></script>

Here is the original version using Moment. Since Luxon is the successor to Moment, I have included this as an alternative.

const value = moment('2014-08-20 15:30:00').format('MM/DD/YYYY h:mm a'); console.log(value); // 08/20/2014 3:30 pm
<script src=""></script>
6

For the date part:(month is 0-indexed while days are 1-indexed)

var date = new Date('2014-8-20'); console.log((date.getMonth()+1) + '/' + date.getDate() + '/' + date.getFullYear()); 

for the time you'll want to create a function to test different situations and convert.

2

I don't think that can be done RELIABLY with built in methods on the native Date object. The toLocaleString method gets close, but if I am remembering correctly, it won't work correctly in IE < 10. If you are able to use a library for this task, MomentJS is a really amazing library; and it makes working with dates and times easy. Otherwise, I think you will have to write a basic function to give you the format that you are after.

function formatDate(date) { var year = date.getFullYear(), month = date.getMonth() + 1, // months are zero indexed day = date.getDate(), hour = date.getHours(), minute = date.getMinutes(), second = date.getSeconds(), hourFormatted = hour % 12 || 12, // hour returned in 24 hour format minuteFormatted = minute < 10 ? "0" + minute : minute, morning = hour < 12 ? "am" : "pm"; return month + "/" + day + "/" + year + " " + hourFormatted + ":" + minuteFormatted + morning; } 
4

You can do that:

function formatAMPM(date) { // This is to display 12 hour format like you asked var hours = date.getHours(); var minutes = date.getMinutes(); var ampm = hours >= 12 ? 'pm' : 'am'; hours = hours % 12; hours = hours ? hours : 12; // the hour '0' should be '12' minutes = minutes < 10 ? '0'+minutes : minutes; var strTime = hours + ':' + minutes + ' ' + ampm; return strTime; } var myDate = new Date(); var displayDate = myDate.getMonth()+ '/' +myDate.getDate()+ '/' +myDate.getFullYear()+ ' ' +formatAMPM(myDate); console.log(displayDate); 

Fiddle