42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
function add12hours(dateString) {
|
|
|
|
// Get the parts of the date string
|
|
var parts = dateString.split(/\s+/),
|
|
date = parts[1],
|
|
month = parts[0],
|
|
year = parts[2],
|
|
time = parts[3];
|
|
|
|
var hr = Number(time.split(':')[0]),
|
|
min = Number(time.split(':')[1].replace(/\D/g,'')),
|
|
ampm = time && time.match(/[a-z]+$/i)[0],
|
|
zone = parts[4].toUpperCase();
|
|
|
|
var months = ['January','February','March','April','May','June',
|
|
'July','August','September','October','November','December'];
|
|
var zones = {'EST': 300, 'AEST': -600}; // Minutes to add to zone time to get UTC
|
|
|
|
// Convert month name to number, zero indexed. Return if invalid month
|
|
month = months.indexOf(month);
|
|
if (month === -1) { return; }
|
|
|
|
// Add 12 hours as specified. Add another 12 if pm for 24hr time
|
|
hr += (ampm.toLowerCase() === 'pm') ? 24 : 12
|
|
|
|
// Create a date object in local zone
|
|
var localTime = new Date(year, month, date);
|
|
localTime.setHours(hr, min, 0, 0);
|
|
|
|
// Adjust localTime minutes for the time zones so it is now a local date
|
|
// representing the same moment as the source date plus 12 hours
|
|
localTime.setMinutes(localTime.getMinutes() + zones[zone] - localTime.getTimezoneOffset() );
|
|
return localTime;
|
|
}
|
|
|
|
var inputDateString = 'March 7 2009 7:30pm EST';
|
|
|
|
console.log(
|
|
'Input: ' + inputDateString + '\n' +
|
|
'+12hrs in local time: ' + add12hours(inputDateString)
|
|
);
|