javascript, jquery time format - javascript

I have a question, how can I change time from 24hr format to 12, the easiest way, in javascript or Jquery .
This is what I have :
TempDate = $.datepicker.formatDate('MM dd, yy', TempDate);
var ChangeDate = TempDate + " " + TradeTime;
now TradeTime= 15:59 , but I wanna be 3:59PM
What is the easiest way , or can I use datapicker or to force this format in the same time with date.
Thanks

I'm afraid you will just have to do it manually, quick n dirty, for now ;)
function to12Hrs(strHrs, strMin) {
var hrs = Number(strHrs);
var min = Number(strMin);
var ampm = "am";
if(isNaN(hrs) || isNaN(min) || hrs > 23 || hrs < 0) {
throw ("Invalid Date " + str24Hrs);
}
if(hrs >= 12) {
hrs = (hrs - 12) || 12;
ampm = "pm";
}
var strHr = (hrs < 10) ? "0".concat(hrs) : hrs;
var strMin = (min < 10) ? "0".concat(min) : min;
return (strHr + ":" + strMin + ampm);
}
var arr = "12:30".split(":");
alert(to12Hrs(arr[0], arr[1])); // 12:30pm
arr = "11:00".split(":");
alert(to12Hrs(arr[0], arr[1])); // 11:00am
arr = "02:00".split(":");
alert(to12Hrs(arr[0], arr[1])); // 02:00am
arr = "20:00".split(":");
alert(to12Hrs(arr[0], arr[1])); // 08:00pm

This helped me :
TradeTime = ("" + TradeTime).split(":",2);
if (TradeTime[0] < 12)
{
a_p = "AM";
}
else
{
a_p = "PM";
}
if (TradeTime[0] == 0)
{
TradeTime[0] = 12;
}
if (TradeTime[0] > 12)
{
TradeTime[0] = TradeTime[0] - 12;
}

Related

How to set Am and Pm for Clock [duplicate]

I have buttons with the names of big cities.
Clicking them, I want to get local time in them.
$('#btnToronto').click(function () {
var hours = new Date().getHours();
var hours = hours-2; //this is the distance from my local time
alert ('Toronto time: ' + hours + ' h'); //this works correctly
});
But how can I get AM or PM ?
You should just be able to check if hours is greater than 12.
var ampm = (hours >= 12) ? "PM" : "AM";
But have you considered the case where the hour is less than 2 before you subtract 2? You'd end up with a negative number for your hour.
Try below code:
$('#btnToronto').click(function () {
var hours = new Date().getHours();
var hours = (hours+24-2)%24;
var mid='am';
if(hours==0){ //At 00 hours we need to show 12 am
hours=12;
}
else if(hours>12)
{
hours=hours%12;
mid='pm';
}
alert ('Toronto time: ' + hours + mid);
});
You can use like this,
var dt = new Date();
var h = dt.getHours(), m = dt.getMinutes();
var _time = (h > 12) ? (h-12 + ':' + m +' PM') : (h + ':' + m +' AM');
Hopes this will be better with minutes too.
const now = new Date()
.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: true })
.toLowerCase();
Basically you just need to put {hour12: true} and it's done.
result => now = "21:00 pm";
If hours is less than 12, it's the a.m..
var hours = new Date().getHours(), // this is local hours, may want getUTCHours()
am;
// adjust for timezone
hours = (hours + 24 - 2) % 24;
// get am/pm
am = hours < 12 ? 'a.m.' : 'p.m.';
// convert to 12-hour style
hours = (hours % 12) || 12;
Now, for me as you didn't use getUTCHours, it is currently 2 hours after
hours + ' ' + am; // "6 p.m."
very interesting post. in a function that take a date in parameter it can appear like that :
function hourwithAMPM(dateInput) {
var d = new Date(dateInput);
var ampm = (d.getHours() >= 12) ? "PM" : "AM";
var hours = (d.getHours() >= 12) ? d.getHours()-12 : d.getHours();
return hours+' : '+d.getMinutes()+' '+ampm;
}
with date.js
<script type="text/javascript" src="http://www.datejs.com/build/date.js"></script>
you can write like this
new Date().toString("hh:mm tt")
cheet sheet is here format specifiers
tt is for AM/PM
Try this:
h = h > 12 ? h-12 +'PM' : h +'AM';
The best way without extensions and complex coding:
date.toLocaleString([], { hour12: true});
How do you display javascript datetime in 12 hour AM/PM format?
here is get time i use in my code
let current = new Date();
let cDate = current.getDate() + '-' + (current.getMonth() + 1) + '-' + current.getFullYear();
let hours = current.getHours();
let am_pm = (hours >= 12) ? "PM" : "AM";
if(hours >= 12){
hours -=12;
}
let cTime = hours + ":" + current.getMinutes() + ":" + current.getSeconds() +" "+ am_pm;
let dateTime = cDate + ' ' + cTime;
console.log(dateTime); // 1-3-2021 2:28:14 PM
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12;
minutes = minutes < 10 ? '0' + minutes : minutes;
var timewithampm = hours + ':' + minutes + ' ' + ampm;
return timewithampm;
var dt = new Date();
var h = dt.getHours(),
m = dt.getMinutes();
var time;
if (h == 12) {
time = h + ":" + m + " PM";
} else {
time = h > 12 ? h - 12 + ":" + m + " PM" : h + ":" + m + " AM";
}
//var time = h > 12 ? h - 12 + ":" + m + " PM" : h + ":" + m + " AM";
console.log(`CURRENT TIME IS ${time}`);
This will work for everytime,
function Timer() {
var dt = new Date()
if (dt.getHours() >= 12){
ampm = "PM";
} else {
ampm = "AM";
}
if (dt.getHours() < 10) {
hour = "0" + dt.getHours();
} else {
hour = dt.getHours();
}
if (dt.getMinutes() < 10) {
minute = "0" + dt.getMinutes();
} else {
minute = dt.getMinutes();
}
if (dt.getSeconds() < 10) {
second = "0" + dt.getSeconds();
} else {
second = dt.getSeconds();
}
if (dt.getHours() > 12) {
hour = dt.getHours() - 12;
} else {
hour = dt.getHours();
}
if (hour < 10) {
hour = "0" + hour;
} else {
hour = hour;
}
document.getElementById('time').innerHTML = hour + ":" + minute + ":" + second + " " + ampm;
setTimeout("Timer()", 1000);
}
Timer()
<div id="time"></div>

Jquery function to Increment one hours based on time input string

I have string value in this format.
9:00 am
i want it to be like this.
9:00 am - 10:00 am
second hour must be 1 greater then first one. for example if time is
7:00 am then it should be 7:00 am - 8:00 am
how can i do that using jquery?
i tried this but its not working as it works now.
var time= "9:00 am"
var nexttime=time.setHours(time.getHours()+1)
alert(nexttime);
getting error of
time.getHours is not a function
You can try this :
function increaseTimeByOne(timeStr) {
var splitedTimeStr = timeStr.split(':');
var hours = parseInt(splitedTimeStr[0]);
var meridiem = splitedTimeStr[1].split(" ")[1];
var minutes = splitedTimeStr[1].split(" ")[0];
var nextHours = (hours + 1);
var nextMeridiem;
if (hours >= 11) {
if (meridiem.toLowerCase() == "am") {
nextMeridiem = "pm";
} else if (meridiem.toLowerCase() == "pm") {
nextMeridiem = "am";
}
if (nextHours > 12) {
nextHours = nextHours - 12;
}
} else {
nextMeridiem = meridiem;
}
return nextHours + ":" + minutes + " " + nextMeridiem;
}
and using above function as
var timestr="9:00 am";
var next_hour = increaseTimeByOne(timeStr);
alert(next_hour);
refer this
var time=new Date();
time.setHours(9, 00, 00);
var nexttime=(time.getHours()+1);
alert(nexttime);
// to get hrs mins and seconds
var nexttime=(time.getHours()+1) +":"+time.getMinutes()+":"+time.getSeconds();
YOu can make your time string like:
function increaseTimeByOne(t) {
var s = t.split(':');
var n = parseInt(s[0], 10);
var nt = (n + 1) + ":00 ";
var ampm = n >= 11 ? "pm" : "am";
return t + " - " + nt + ampm;
}
console.log(increaseTimeByOne('9:00 am'));
console.log(increaseTimeByOne('11:00 am'));
console.log(increaseTimeByOne('12:00 pm'));

How to compare time with AM PM in JavaScript

I have two strings as follows:
var a = "11/24/2014 3:10 PM"
var b = "11/23/2014 7:45 AM"
How can I compare them with JavaScript, so that I could show that the time for var b happens before var a?
DEMO
Convert the date stamp into UNIX time codes and then compare the two
var a = "11/24/2014 3:10 PM";
var b = "11/23/2014 7:45 AM";
var aDate = new Date(a).getTime();
var bDate = new Date(b).getTime();
if(aDate < bDate){
console.log('a happened before b');
}else if (aDate > bDate){
console.log('a happend after b');
}else{
console.log('a and b happened at the same time')
}
You need to Parse dates to DateType take a look at following snippet
var a = "11/24/2014 3:10 PM"
b = "11/23/2014 7:45 AM"
var aDate= new Date(Date.parse(a));
var bDate = new Date(Date.parse(b));
if (aDate> bDate ){
alert(aDate)
}else{
alert(bDate);
}
Try This:-
function modify_time(){
var start_time = "10:30 PM";
var end_time = "12:30 PM";
start_time = start_time.split(" ");
var time = start_time[0].split(":");
var stime = time[0];
if(start_time[1] == "PM" && stime<12) stime = parseInt(stime) + 12;
start_time = stime + ":" + time[1] + ":00";
end_time = end_time.split(" ");
var time1 = end_time[0].split(":");
var etime = time1[0];
if(end_time[1] == "PM" && etime<12) etime = parseInt(etime) + 12;
end_time = etime + ":" + time1[1] + ":00";
if (start_time != '' && end_time != '') {
alert(start_time);
alert(end_time);
if (end_time <= start_time) {
alert('select valid time');
}
}
}
I have modified the code shared by Mohit Singh to make it perfect :
function checkTime() {
var stime2 = '';
var etime2 = '';
if ($("#txtRequestTimeStart").val() != '' && $("#txtRequestTimeStop").val() != '') {
var start_time = $("#txtRequestTimeStart").val();
var end_time = $("#txtRequestTimeStop").val();
start_time = start_time.split(" ");
var time = start_time[0].split(":");
var stime = time[0];
if (stime.length == 1) {
stime2 = "0" + stime;
if (start_time[1] == "PM" && stime2 < 12) stime2 = parseInt(stime2) + 12;
start_time = stime2 + ":" + time[1] + ":00";
}
else {
if (start_time[1] == "PM" && stime < 12) stime = parseInt(stime) + 12;
start_time = stime + ":" + time[1] + ":00";
}
end_time = end_time.split(" ");
var time1 = end_time[0].split(":");
var etime = time1[0];
if (etime.length == 1) {
etime2 = "0" + etime;
if (end_time[1] == "PM" && etime2 < 12) etime2 = parseInt(etime2) + 12;
end_time = etime2 + ":" + time1[1] + ":00";
}
else {
if (end_time[1] == "PM" && etime < 12) etime = parseInt(etime) + 12;
end_time = etime + ":" + time1[1] + ":00";
}
if (start_time != '' && end_time != '') {
if (end_time <= start_time) {
alert('Begin Time should not be greater than or equal to End Time');
}
}
}
}

javascript Date Object how long ago

I'm trying to show how long ago a video was uploaded, i cant seem to get the hours and minutes Date Object Methods to work in this script. I'm working of a script called YouMax 2.0 and i have been editing the function getDateDiff, i have come up with this edit of the function. Thank you for any help on this.
function getDateDiff(timestamp) {
if (null === timestamp || timestamp === "" || timestamp === "undefined") return "?";
var splitDate = ((timestamp.toString().split('T'))[0]).split('-');
var splitTime = ((timestamp.toString().split('T'))[1]).split(':');
var d1 = new Date();
var d1Y = d1.getFullYear();
var d2Y = parseInt(splitDate[0], 10);
var d1M = d1.getMonth() + 1;
var d2M = parseInt(splitDate[1], 10);
var d1D = d1.getDate();
var d2D = parseInt(splitDate[2], 10);
var d1H = d1.getHours();
var d2H = parseInt(splitTime[0], 10);
var d1T = d1.getMinutes();
var d2T = parseInt(splitTime[1], 10);
var diffInMinutes = (d1T + 59 * d1H + 23) - (d2T + 59 * d2H + 23);
if (diffInMinutes <= 1) return "1 Minute";
else if (diffInMinutes <= 59) return diffInMinutes + " Minutes";
var diffInHours = (d1H + 23 * d1M) - (d2H + 23 * d1M);
if (diffInHours <= 1) return "1 Hour";
else if (diffInHours < 23) return diffInHours + " Hours";
var diffInDays = (d1D + 30 * d1M + 12 * d1Y) - (d2D + 30 * d2M + 12 * d2Y);
if (diffInDays < 7) return diffInDays + " days";
else if (diffInDays > 7 && diffInDays < 14) return "1 week";
else if (diffInDays >= 14 && diffInDays < 30) return Math.floor(diffInDays / 7) + " weeks";
var diffInMonths = (d1M + 12 * d1Y) - (d2M + 12 * d2Y);
if (diffInMonths <= 1) return "1 month";
else if (diffInMonths < 12) return diffInMonths + " months";
var diffInYears = Math.floor(diffInMonths / 12);
if (diffInYears <= 1) return "1 year";
else if (diffInYears < 12) return diffInYears + " years";
}
my new function only returns minutes and other and wont update to change of day
I assume you are fetching the timestamp from a mysql database. This was also answered here. The top answer is in php but it is not really different from Javascript. I do suggest using php for this however.
you can see that your splitting was not correct...
this is working fine..
var splitDate = ((timestamp.toString().split('T'))[0]).split('-');
var splitTime = ((timestamp.toString().split('T'))[1]).split(':');
var splitTime1 = ((splitTime[2].toString().split('Z'))[0]).split('.');
splitDate[0] = Year;
splitDate[1] = Month;
splitDate[2] = Day;
splitTime[0] = Hours;
splitTime[1] = Minutes;
splitTime1[0] = Seconds;
splitTime1[1] = MilliSeconds;
you can now perform what ever you want to..

convert 12-hour hh:mm AM/PM to 24-hour hh:mm

Is there any simple way to convert 12-hour hh:mm AM/PM to 24-hour hh:mm using jquery?
Note: not using any other libraries.
I have a var time = $("#starttime").val() that returns a hh:mm AM/PM.
Try this
var time = $("#starttime").val();
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours<10) sHours = "0" + sHours;
if(minutes<10) sMinutes = "0" + sMinutes;
alert(sHours + ":" + sMinutes);
This question needs a newer answer :)
const convertTime12to24 = (time12h) => {
const [time, modifier] = time12h.split(' ');
let [hours, minutes] = time.split(':');
if (hours === '12') {
hours = '00';
}
if (modifier === 'PM') {
hours = parseInt(hours, 10) + 12;
}
return `${hours}:${minutes}`;
}
console.log(convertTime12to24('01:02 PM'));
console.log(convertTime12to24('05:06 PM'));
console.log(convertTime12to24('12:00 PM'));
console.log(convertTime12to24('12:00 AM'));
This will help :
function getTwentyFourHourTime(amPmString) {
var d = new Date("1/1/2013 " + amPmString);
return d.getHours() + ':' + d.getMinutes();
}
Example :
getTwentyFourHourTime("8:45 PM"); // "20:45"
getTwentyFourHourTime("8:45 AM"); // "8:45"
Update :
Note : There should be a space for timestring between "Time" and "am/pm".
I had to do something similar but I was generating a Date object so I ended up making a function like this:
function convertTo24Hour(time) {
var hours = parseInt(time.substr(0, 2));
if(time.indexOf('am') != -1 && hours == 12) {
time = time.replace('12', '0');
}
if(time.indexOf('pm') != -1 && hours < 12) {
time = time.replace(hours, (hours + 12));
}
return time.replace(/(am|pm)/, '');
}
I think this reads a little easier. You feed a string in the format h:mm am/pm.
var time = convertTo24Hour($("#starttime").val().toLowerCase());
var date = new Date($("#startday").val() + ' ' + time);
Examples:
$("#startday").val('7/10/2013');
$("#starttime").val('12:00am');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 00:00:00 GMT-0700 (PDT)
$("#starttime").val('12:00pm');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 12:00:00 GMT-0700 (PDT)
$("#starttime").val('1:00am');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 01:00:00 GMT-0700 (PDT)
$("#starttime").val('12:12am');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 00:12:00 GMT-0700 (PDT)
$("#starttime").val('3:12am');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 03:12:00 GMT-0700 (PDT)
$("#starttime").val('9:12pm');
new Date($("#startday").val() + ' ' + convertTo24Hour($("#starttime").val().toLowerCase()));
Wed Jul 10 2013 21:12:00 GMT-0700 (PDT)
Here my solution including seconds:
function convert_to_24h(time_str) {
// Convert a string like 10:05:23 PM to 24h format, returns like [22,5,23]
var time = time_str.match(/(\d+):(\d+):(\d+) (\w)/);
var hours = Number(time[1]);
var minutes = Number(time[2]);
var seconds = Number(time[3]);
var meridian = time[4].toLowerCase();
if (meridian == 'p' && hours < 12) {
hours += 12;
}
else if (meridian == 'a' && hours == 12) {
hours -= 12;
}
return [hours, minutes, seconds];
};
function timeConversion(s) {
var time = s.toLowerCase().split(':');
var hours = parseInt(time[0]);
var _ampm = time[2];
if (_ampm.indexOf('am') != -1 && hours == 12) {
time[0] = '00';
}
if (_ampm.indexOf('pm') != -1 && hours < 12) {
time[0] = hours + 12;
}
return time.join(':').replace(/(am|pm)/, '');
}
Call the function with string params:
timeConversion('17:05:45AM')
or
timeConversion('07:05:45PM')
i must recommend a library: Moment
code:
var target12 = '2016-12-08 9:32:45 PM';
console.log(moment(target12, 'YYYY-MM-DD h:m:s A').format('YYYY-MM-DD HH:mm:ss'));
For anybody reading this in the future, here is a simpler answer:
var s = "11:41:02PM";
var time = s.match(/\d{2}/g);
if (time[0] === "12") time[0] = "00";
if (s.indexOf("PM") > -1) time[0] = parseInt(time[0])+12;
return time.join(":");
Single line code for calc time 12 hours to 24 hours
Any format of the input working fine
const convertTime12to24 = (time12h) => moment(time12h, 'hh:mm A').format('HH:mm');
console.log(convertTime12to24('06:30 pm'));
console.log(convertTime12to24('06:00 am'));
console.log(convertTime12to24('9:00 am'));
console.log(convertTime12to24('9pm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
In case you're looking for a solution that converts ANY FORMAT to 24 hours HH:MM correctly.
function get24hTime(str) {
str = String(str).toLowerCase().replace(/\s/g, '');
var has_am = str.indexOf('am') >= 0;
var has_pm = str.indexOf('pm') >= 0;
// first strip off the am/pm, leave it either hour or hour:minute
str = str.replace('am', '').replace('pm', '');
// if hour, convert to hour:00
if (str.indexOf(':') < 0) str = str + ':00';
// now it's hour:minute
// we add am/pm back if striped out before
if (has_am) str += ' am';
if (has_pm) str += ' pm';
// now its either hour:minute, or hour:minute am/pm
// put it in a date object, it will convert to 24 hours format for us
var d = new Date("1/1/2011 " + str);
// make hours and minutes double digits
var doubleDigits = function(n) {
return (parseInt(n) < 10) ? "0" + n : String(n);
};
return doubleDigits(d.getHours()) + ':' + doubleDigits(d.getMinutes());
}
console.log(get24hTime('6')); // 06:00
console.log(get24hTime('6am')); // 06:00
console.log(get24hTime('6pm')); // 18:00
console.log(get24hTime('6:11pm')); // 18:11
console.log(get24hTime('6:11')); // 06:11
console.log(get24hTime('18')); // 18:00
console.log(get24hTime('18:11')); // 18:11
I needed this function for a project. I tried devnull69's but I was having some trouble, mostly because the string input is very specific for the am/pm section and I would've needed to change my validation. I messed around with Adrian P.'s jsfiddle and ended up with a version that seems to work better for a larger variety of date formats. Here is the fiddle: http://jsfiddle.net/u91q8kmt/2/.
Here is the function:
function ConvertTimeformat(format, str) {
var hours = Number(str.match(/^(\d+)/)[1]);
var minutes = Number(str.match(/:(\d+)/)[1]);
var AMPM = str.match(/\s?([AaPp][Mm]?)$/)[1];
var pm = ['P', 'p', 'PM', 'pM', 'pm', 'Pm'];
var am = ['A', 'a', 'AM', 'aM', 'am', 'Am'];
if (pm.indexOf(AMPM) >= 0 && hours < 12) hours = hours + 12;
if (am.indexOf(AMPM) >= 0 && hours == 12) hours = hours - 12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if (hours < 10) sHours = "0" + sHours;
if (minutes < 10) sMinutes = "0" + sMinutes;
if (format == '0000') {
return (sHours + sMinutes);
} else if (format == '00:00') {
return (sHours + ":" + sMinutes);
} else {
return false;
}
}
With this you can have the following:
Sample Input: 07:05:45PM
Sample Output: 19:05:45
function timeConversion(s) {
let output = '';
const timeSeparator = ':'
const timeTokenType = s.substr(s.length - 2 , 2).toLowerCase();
const timeArr = s.split(timeSeparator).map((timeToken) => {
const isTimeTokenType =
timeToken.toLowerCase().indexOf('am') > 0 ||
timeToken.toLowerCase().indexOf('pm');
if(isTimeTokenType){
return timeToken.substr(0, 2);
} else {
return timeToken;
}
});
const hour = timeArr[0];
const minutes = timeArr[1];
const seconds = timeArr[2];
const hourIn24 = (timeTokenType === 'am') ? parseInt(hour) - 12 :
parseInt(hour) + 12;
return hourIn24.toString()+ timeSeparator + minutes + timeSeparator + seconds;
}
Hope you like it !
Because all the answers so far seem to be verbose, here's a simple minimalist solution:
/* Convert h:mm a/p to H:mm
* i.e. 12 hour time to 24 hour time
* #param {string} time - h:mm a/p format
* #returns {string} time in H:mm format
*/
function to24HrTime(time) {
let [hr, min, ap] = time.toLowerCase().match(/\d+|[a-z]+/g) || [];
return `${(hr % 12) + (ap == 'am'? 0 : 12)}:${min}`;
}
['9:02 am',
'9:02 pm',
'9:02am',
'9:02pm',
'12:15 AM',
'12:01 PM',
].forEach(time => console.log(`${time} -> ${to24HrTime(time)}`));
That assumes the input string has a suitable format and values. A more robust version is:
/* Given 12 hr time, return24 hr time
* #param {string} time - time in format h:mm am/pm
* h must be in range 1 to 12
* mm must be in range 00 to 59
* am/pm is not case sensitive
* #returns {string} time in 24 hr format H:mm
* H in range 0 to 23
* mm in range 00 to 59
*
*/
function to24HrTime(time = new Date().toLocaleString('en',{hour:'numeric', minute:'2-digit', hour12:true})) {
let [hr, min, ap] = String(time).toLowerCase().match(/\d+|[a-z]+/g) || [];
// If time is valid, return reformatted time
// Otherwise return undefined
return /^([1-9]|1[0-2]):[0-5]\d\s?(am|pm)/i.test(time)? `${(hr%12)+(ap=='am'?0:12)}:${min}` : void 0;
}
// Examples
// Without arguments
console.log(`No args -> ${to24HrTime()}`);
// Valid input
['9:02 am',
'9:02 pm',
'9:02am',
'9:02pm',
'12:15 AM',
'12:01 PM',
// Invalid input
'12', // Missing mins & ap
'99:05 am', // hrs out of range
'0:05 am', // hrs out of range
'9:60 am', // mins out of range
'9:09 pp', // ap out of range
{}, // Random object
].forEach(time => console.log(`${time} -> ${to24HrTime(time)}`));
An extended version of #krzysztof answer with the ability to work on time that has space or not between time and modifier.
const convertTime12to24 = (time12h) => {
const [fullMatch, time, modifier] = time12h.match(/(\d?\d:\d\d)\s*(\w{2})/i);
let [hours, minutes] = time.split(':');
if (hours === '12') {
hours = '00';
}
if (modifier === 'PM') {
hours = parseInt(hours, 10) + 12;
}
return `${hours}:${minutes}`;
}
console.log(convertTime12to24('01:02 PM'));
console.log(convertTime12to24('05:06 PM'));
console.log(convertTime12to24('12:00 PM'));
console.log(convertTime12to24('12:00 AM'));
based on meeting CodeSkill #1
validation of format should be another function :)
function convertTimeFrom12To24(timeStr) {
var colon = timeStr.indexOf(':');
var hours = timeStr.substr(0, colon),
minutes = timeStr.substr(colon+1, 2),
meridian = timeStr.substr(colon+4, 2).toUpperCase();
var hoursInt = parseInt(hours, 10),
offset = meridian == 'PM' ? 12 : 0;
if (hoursInt === 12) {
hoursInt = offset;
} else {
hoursInt += offset;
}
return hoursInt + ":" + minutes;
}
console.log(convertTimeFrom12To24("12:00 AM"));
console.log(convertTimeFrom12To24("12:00 PM"));
console.log(convertTimeFrom12To24("11:00 AM"));
console.log(convertTimeFrom12To24("01:00 AM"));
console.log(convertTimeFrom12To24("01:00 PM"));
Converting AM/PM Time string to 24 Hours Format.
Example 9:30 PM to 21:30
function get24HrsFrmAMPM(timeStr) {
if (timeStr && timeStr.indexOf(' ') !== -1 && timeStr.indexOf(':') !== -1) {
var hrs = 0;
var tempAry = timeStr.split(' ');
var hrsMinAry = tempAry[0].split(':');
hrs = parseInt(hrsMinAry[0], 10);
if ((tempAry[1] == 'AM' || tempAry[1] == 'am') && hrs == 12) {
hrs = 0;
} else if ((tempAry[1] == 'PM' || tempAry[1] == 'pm') && hrs != 12) {
hrs += 12;
}
return ('0' + hrs).slice(-2) + ':' + ('0' + parseInt(hrsMinAry[1], 10)).slice(-2);
} else {
return null;
}
}
//here is my solution.
function timeConversion(s) {
// Write your code here
let amPM = s.indexOf('AM') !== -1 ? 'AM' : 'PM';
let tString = s.toString().replace(/AM|PM/gi,'');
let splitTime = tString.split(':');
let h = splitTime[0];
let m = splitTime[1];
let sec = splitTime[2];
let twntyfr = amPM === 'PM' && parseInt(h) !== 12 ? parseInt(h)+12 : h;
if(parseInt(twntyfr) === 12 && amPM === 'AM') twntyfr = '00';
return twntyfr+':'+m+':'+sec;
}
HackerRank TimeConversion Solution
12-hour AM/PM format, to military (24-hour) time
function timeConversion(s) {
let time = 0
let hour = s.slice(0, 2)
let toD = s.slice(-2)
if (toD === 'AM' && hour == 12) {
time = `00${s.slice(2, s.length -2)}`
} else {
if (toD === 'PM' && hour < 12) {
time = `${Number(12 + parseInt(hour))}${s.slice(2, s.length - 2)}`
} else {
time = s.slice(0, s.length - 2)
}
}
return console.log(time)
}
timeConversion('12:00:17AM') // 00:00:17
timeConversion('09:21:33PM') // 21:21:33
timeConversion('12:43:53PM') // 12:43:53
function getDisplayDatetime() {
var d = new Date("February 04, 2011 19:00"),
hh = d.getHours(), mm = d.getMinutes(), dd = "AM", h = hh;
mm=(mm.toString().length == 1)? mm = "0" + mm:mm;
h=(h>=12)?hh-12:h;
dd=(hh>=12)?"PM":"AM";
h=(h == 0)?12:h;
var textvalue=document.getElementById("txt");
textvalue.value=h + ":" + mm + " " + dd;
}
</script>
</head>
<body>
<input type="button" value="click" onclick="getDisplayDatetime()">
<input type="text" id="txt"/>
dateFormat.masks.armyTime= 'HH:MM';
now.format("armyTime");
function convertTo24Hour(time) {
time = time.toUpperCase();
var hours = parseInt(time.substr(0, 2));
if(time.indexOf('AM') != -1 && hours == 12) {
time = time.replace('12', '0');
}
if(time.indexOf('PM') != -1 && hours < 12) {
time = time.replace(hours, (hours + 12));
}
return time.replace(/(AM|PM)/, '');
}
date --date="2:00:01 PM" +%T
14:00:01
date --date="2:00 PM" +%T | cut -d':' -f1-2
14:00
var="2:00:02 PM"
date --date="$var" +%T
14:00:02
You could try this more generic function:
function from12to24(hours, minutes, meridian) {
let h = parseInt(hours, 10);
const m = parseInt(minutes, 10);
if (meridian.toUpperCase() === 'PM') {
h = (h !== 12) ? h + 12 : h;
} else {
h = (h === 12) ? 0 : h;
}
return new Date((new Date()).setHours(h,m,0,0));
}
Note it uses some ES6 functionality.
I've created a bit of an adaptation of script #devnull69 submitted. I felt for my application it would be more useful as a function that returned the value that I could, then use as a variable.
HTML
<input type="text" id="time_field" />
<button>Submit</submit>
jQuery
$(document).ready(function() {
function convertTime(time) {
var hours = Number(time.match(/^(\d\d?)/)[1]);
var minutes = Number(time.match(/:(\d\d?)/)[1]);
var AMPM = time.match(/\s(AM|PM)$/i)[1];
if((AMPM == 'PM' || AMPM == 'pm') && hours < 12) {
hours = hours + 12;
}
else if((AMPM == 'AM' || AMPM == "am") && hours == 12) {
hours = hours - 12;
}
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours < 10) {
sHours = "0" + sHours;
}
else if(minutes < 10) {
sMinutes = "0" + sMinutes;
}
return sHours + ":" + sMinutes;
}
$('button').click(function() {
alert(convertTime($('#time_field').val()));
});
});
single and easy js function for calc time meridian in real time
JS
function convertTime24to12(time24h) {
var timex = time24h.split(':');
if(timex[0] !== undefined && timex [1] !== undefined)
{
var hor = parseInt(timex[0]) > 12 ? (parseInt(timex[0])-12) : timex[0] ;
var minu = timex[1];
var merid = parseInt(timex[0]) < 12 ? 'AM' : 'PM';
var res = hor+':'+minu+' '+merid;
document.getElementById('timeMeridian').innerHTML=res.toString();
}
}
Html
<label for="end-time">Hour <i id="timeMeridian"></i> </label>
<input type="time" name="hora" placeholder="Hora" id="end-time" class="form-control" onkeyup="convertTime24to12(this.value)">
Typescript solution based off of #krzysztof-dÄ…browski 's answer
export interface HoursMinutes {
hours: number;
minutes: number;
}
export function convert12to24(time12h: string): HoursMinutes {
const [time, modifier] = time12h.split(' ');
let [hours, minutes] = time.split(':');
if (hours === '12') {
hours = '00';
}
if (minutes.length === 1) {
minutes = `0${minutes}`;
}
if (modifier.toUpperCase() === 'PM') {
hours = parseInt(hours, 10) + 12 + '';
}
return {
hours: parseInt(hours, 10),
minutes: parseInt(minutes, 10)
};
}
Tested for all the use cases
function timeConversion(s) {
let h24;
let m24;
let sec24;
const splittedDate = s.split(":");
const h = parseInt(splittedDate[0], 10);
const m = parseInt(splittedDate[1], 10);
const sec = parseInt(splittedDate[2][0] + splittedDate[2][1], 10);
const meridiem = splittedDate[2][2] + splittedDate[2][3];
if (meridiem === "AM") {
if (h === 12) {
h24 = '00';
} else {
h24 = h;
if (h24 < 10) {
h24 = '0' + h24;
}
}
m24 = m;
sec24 = sec;
} else if (meridiem === "PM") {
if (h === 12) {
h24 = h
} else {
h24 = h + 12;
if (h24 < 10) {
h24 = '0' + h24;
}
}
m24 = m;
sec24 = sec;
}
if (m24 < 10) {
m24 = '0' + m24;
}
if (sec24 < 10) {
sec24 = '0' + sec24;
}
return h24 + ":" + m24 + ":" + sec24;
}
Here is the jsfiddle working example
Short ES6 code
const convertFrom12To24Format = (time12) => {
const [sHours, minutes, period] = time12.match(/([0-9]{1,2}):([0-9]{2}) (AM|PM)/).slice(1);
const PM = period === 'PM';
const hours = (+sHours % 12) + (PM ? 12 : 0);
return `${('0' + hours).slice(-2)}:${minutes}`;
}
const convertFrom24To12Format = (time24) => {
const [sHours, minutes] = time24.match(/([0-9]{1,2}):([0-9]{2})/).slice(1);
const period = +sHours < 12 ? 'AM' : 'PM';
const hours = +sHours % 12 || 12;
return `${hours}:${minutes} ${period}`;
}
I just solved this issue on HackerRank, so I'm here to share my result
function timeConversion(s) {
const isPM = s.indexOf('PM') !== -1;
let [hours, minutes, seconds] = s.replace(isPM ? 'PM':'AM', '').split(':');
if (isPM) {
hours = parseInt(hours, 10) + 12;
hours = hours === 24 ? 12 : hours;
} else {
hours = parseInt(hours, 10);
hours = hours === 12 ? 0 : hours;
if (String(hours).length === 1) hours = '0' + hours;
}
const time = [hours, minutes, seconds].join(':');
return time;
}
This works for inputs like 06:40:03AM.
function formatto24(date) {
let ampm = date.split(" ")[1];
let time = date.split(" ")[0];
if (ampm == "PM") {
let hours = time.split(":")[0];
let minutes = time.split(":")[1];
let seconds = time.split(":")[2];
let hours24 = JSON.parse(hours) + 12;
return hours24 + ":" + minutes + ":" + seconds;
} else {
return time;
}
}

Categories

Resources