Quel est le meilleur moyen de convertir la valeur renvoyée JSON suivante du format 24 heures au format 12 heures avec AM/PM? La date doit rester la même - l'heure est la seule chose qui a besoin d'être formatée.
February 04, 2011 19:00:00
P.S. Utiliser jQuery si cela facilite les choses! Préférerait également une fonction/code simple et ne pas utiliser Date.js.
UPDATE 2: option sans secondes
UPDATE: AM après midi corrigé, testé: http://jsfiddle.net/aorcsik/xbtjF/
J'ai créé cette fonction pour faire ceci:
function formatDate(date) {
var d = new Date(date);
var hh = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
var dd = "AM";
var h = hh;
if (h >= 12) {
h = hh - 12;
dd = "PM";
}
if (h == 0) {
h = 12;
}
m = m < 10 ? "0" + m : m;
s = s < 10 ? "0" + s : s;
/* if you want 2 digit hours:
h = h<10?"0"+h:h; */
var pattern = new RegExp("0?" + hh + ":" + m + ":" + s);
var replacement = h + ":" + m;
/* if you want to add seconds
replacement += ":"+s; */
replacement += " " + dd;
return date.replace(pattern, replacement);
}
alert(formatDate("February 04, 2011 12:00:00"));
Voici comment vous pouvez changer les heures sans déclaration if:
hours = ((hours + 11) % 12 + 1);
//it is pm if hours from 12 onwards
suffix = (hours >= 12)? 'pm' : 'am';
//only -12 from hours if it is greater than 12 (if not back at mid night)
hours = (hours > 12)? hours -12 : hours;
//if 00 then it is 12 am
hours = (hours == '00')? 12 : hours;
Pour tous ceux qui lisent qui veulent UNIQUEMENT l'heure dans la sortie, vous pouvez passer des options à la méthode JavaScript :: Date :: toLocaleString (). Exemple:
var date = new Date("February 04, 2011 19:00:00");
var options = {
hour: 'numeric',
minute: 'numeric',
hour12: true
};
var timeString = date.toLocaleString('en-US', options);
console.log(timeString);
timeString sera défini sur:
8h00
Ajoutez "seconde: 'numérique" "à vos options si vous voulez aussi des secondes. Pour toutes les options, voir this .
Voici une manière assez succincte de le faire en utilisant un prototype:
Date.prototype.getFormattedTime = function () { var heures = this.getHours () == 0? "12": this.getHours ()> 12? this.getHours () - 12: this.getHours (); var minutes = (this.getMinutes () <10? "0": "") + this.getMinutes (); var ampm = this.getHours () <12? "MATIN APRÈS-MIDI"; var formatedTime = heures + ":" + minutes + "" + ampm; renvoyer formatéTime; }
Ensuite, tout ce que vous avez à faire est de convertir la valeur de votre chaîne en date et d’utiliser la nouvelle méthode:
var stringValue = "4 février 2011 19:00:00; var dateValue = new Date (stringValue); var formatedTime = dateValue.getFormattedTime ();
Ou en une seule ligne:
var formattedTime = new Date ("04 février 2011 19:00:00"). getFormattedTime ();
Gardez les choses simples et propres
var d = new Date();
var n = d.toLocaleString();
function pad(num) {return ("0" + num).slice(-2);}
function time1() {
var today = new Date(),
h = today.getHours(),
m = today.getMinutes(),
s = today.getSeconds();
h = h % 12;
h = h ? h : 12; // the hour '0' should be '12'
clk.innerHTML = h + ':' +
pad(m) + ':' +
pad(s) + ' ' +
(h >= 12 ? 'PM' : 'AM');
}
window.onload = function() {
var clk = document.getElementById('clk');
t = setInterval(time1, 500);
}
<span id="clk"></span>
jQuery ne dispose d'aucun utilitaire Date. Si vous n'utilisez aucune bibliothèque supplémentaire, la méthode habituelle consiste à créer un objet JavaScript Date
, puis à en extraire les données et à les formater vous-même.
Pour créer l'objet Date
, vous pouvez soit vous assurer que votre chaîne de date dans le JSON est sous une forme que Date
comprend, qui est la norme IETF (qui est fondamentalement RFC 822 section 5 ). Donc, si vous avez la possibilité de changer votre JSON, ce serait plus simple. (EDIT: Votre format peut réellement fonctionner comme il est.)
Si vous ne pouvez pas modifier votre JSON, vous devrez alors analyser la chaîne vous-même et obtenir le jour, la bouche, l'année, les heures, les minutes et les secondes sous forme d'entiers et créer l'objet Date
avec celui-ci.
Une fois que vous avez votre objet Date
, vous devez extraire les données dont vous avez besoin et les formater:
var myDate = new Date("4 Feb 2011, 19:00:00");
var hours = myDate.getHours();
var am = true;
if (hours > 12) {
am = false;
hours -= 12;
} else (hours == 12) {
am = false;
} else (hours == 0) {
hours = 12;
}
var minutes = myDate.getMinutes();
alert("It is " + hours + " " + (am ? "a.m." : "p.m.") + " and " + minutes + " minutes".);
1) "Squared" instructions pour faire 24 heures sont devenues 12 heures:
var hours24 = new Date().getHours(); // retrieve current hours (in 24 mode)
var dayMode = hours24 < 12 ? "am" : "pm"; // if it's less than 12 then "am"
var hours12 = hours24 <= 12 ? (hours24 == 0 ? 12 : hours24) : hours24 - 12;
// "0" in 24-mode now becames "12 am" in 12-mode – thanks to user @Cristian
document.write(hours12 + " " + dayMode); // printing out the result of code
2) En une seule ligne (même résultat avec un algorithme légèrement différent):
var str12 = (h24 = new Date().getHours()) && (h24 - ((h24 == 0)? -12 : (h24 <= 12)? 0 : 12)) + (h24 < 12 ? " am" : " pm");
Les deux options renvoient une chaîne, telle que "5 pm"
ou "10 am"
etc.
date = date.replace(/[0-9]{1,2}(:[0-9]{2}){2}/, function (time) {
var hms = time.split(':'),
h = +hms[0],
suffix = (h < 12) ? 'am' : 'pm';
hms[0] = h % 12 || 12;
return hms.join(':') + suffix
});
edit: J'ai oublié de traiter avec 12 heures am/pm. Fixé.
Vous pouvez jeter un oeil à this . Un des exemples dit:
var d = new Date(dateString);
Une fois que vous avez un objet Date, vous pouvez jouer assez facilement avec lui. Vous pouvez appeler toLocaleDateString, toLocaleTimeString ou vérifier si getHours est supérieur à 12, puis calculer simplement l'heure AM/PM.
function GetTime(date) {
var currentTime = (new Date(date))
var hours = currentTime.getHours()
//Note: before converting into 12 hour format
var suffix = '';
if (hours > 11) {
suffix += "PM";
} else {
suffix += "AM";
}
var minutes = currentTime.getMinutes()
if (minutes < 10) {
minutes = "0" + minutes
}
if (hours > 12) {
hours -= 12;
} else if (hours === 0) {
hours = 12;
}
var time = hours + ":" + minutes + " " + suffix;
return time;
}
Je suis un débutant relatif, mais voici ce que j'ai proposé pour l'un de mes propres projets, et cela semble fonctionner. Il peut y avoir des moyens plus simples de le faire.
function getTime() {
var nowTimeDate = new Date();
var nowHour = nowTimeDate.getHours();
var nowMinutes = nowTimeDate.getMinutes();
var suffix = nowHour >= 12 ? "pm" : "am";
nowHour = (suffix == "pm" & (nowHour > 12 & nowHour < 24)) ? (nowHour - 12) : nowHour;
nowHour = nowHour == 0 ? 12 : nowHour;
nowMinutes = nowMinutes < 10 ? "0" + nowMinutes : nowMinutes;
var currentTime = nowHour + ":" + nowMinutes + suffix;
document.getElementById("currentTime").innerHTML = currentTime;
}
var dt = new Date();
var h = dt.getHours(), m = dt.getMinutes();
var thistime = (h > 12) ? (h-12 + ':' + m +' PM') : (h + ':' + m +' AM');
console.log(thistime);
Voici le Demo
Veuillez essayer avec le code ci-dessous
var s = "15 Feb 2015 11.30 a.m";
var times = s.match("((([0-9])|([0-2][0-9])).([0-9][0-9])[\t ]?((a.m|p.m)|(A.M|P.M)))");
var time = "";
if(times != null){
var hour = times[2];
if((times[6] == "p.m" || times[6] == "P.M")){
if(hour < 12){
hour = parseInt(hour) + parseInt(12);
}else if(hour == 12){
hour = "00";
}
}
time = [hour, times[5], "00"].join(":");
}
Merci
Cela a fonctionné pour moi!
function main() {
var time = readLine();
var formattedTime = time.replace('AM', ' AM').replace('PM', ' PM');
var separators = [':', ' M'];
var hms = formattedTime.split(new RegExp('[' + separators.join('') + ']'));
if (parseInt(hms[0]) < 12 && hms[3] == 'P')
hms[0] = parseInt(hms[0]) + 12;
else if (parseInt(hms[0]) == 12 && hms[3] == 'A')
hms[0] = '00';
console.log(hms[0] + ':' + hms[1] + ':' + hms[2]);
}
c'est votre code html où vous appelez la fonction pour convertir le format horaire 24 heures en 12 heures avec am/pm
<pre id="tests" onClick="tConvert('18:00:00')">
test on click 18:00:00
</pre>
<span id="rzlt"></span>
maintenant dans le code js écrire cette fonction tConvert telle quelle
function tConvert (time)
{
// Check correct time format and split into components
time = time.toString ().match (/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];
if (time.length > 1)
{ // If time format correct
time = time.slice (1); // Remove full string match value
time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
time[0] = +time[0] % 12 || 12; // Adjust hours
}
//return time; // return adjusted time or original string
var tel = document.getElementById ('rzlt');
tel.innerHTML= time.join ('');
}
convertir 18:00:00 à 18:00:00 travailler pour moi
Cette fonction convertira dans les deux sens: 12 à 24 heures ou 24 à 12 heures
function toggle24hr(time, onoff){
if(onoff==undefined) onoff = isNaN(time.replace(':',''))//auto-detect format
var pm = time.toString().toLowerCase().indexOf('pm')>-1 //check if 'pm' exists in the time string
time = time.toString().toLowerCase().replace(/[ap]m/,'').split(':') //convert time to an array of numbers
time[0] = Number(time[0])
if(onoff){//convert to 24 hour:
if((pm && time[0]!=12)) time[0] += 12
else if(!pm && time[0]==12) time[0] = '00' //handle midnight
if(String(time[0]).length==1) time[0] = '0'+time[0] //add leading zeros if needed
}else{ //convert to 12 hour:
pm = time[0]>=12
if(!time[0]) time[0]=12 //handle midnight
else if(pm && time[0]!=12) time[0] -= 12
}
return onoff ? time.join(':') : time.join(':')+(pm ? 'pm' : 'am')
}
Voici quelques exemples:
//convert to 24 hour:
toggle24hr('12:00am') //returns 00:00
toggle24hr('2:00pm') //returns 14:00
toggle24hr('8:00am') //returns 08:00
toggle24hr('12:00pm') //returns 12:00
//convert to 12 hour:
toggle24hr('14:00') //returns 2:00pm
toggle24hr('08:00') //returns 8:00am
toggle24hr('12:00') //returns 12:00pm
toggle24hr('00:00') //returns 12:00am
//you can also force a specific format like this:
toggle24hr('14:00',1) //returns 14:00
toggle24hr('14:00',0) //returns 2:00pm
De toute façon, vous allez finir par faire beaucoup de manipulation de chaîne, alors pourquoi ne pas simplement manipuler la chaîne de date elle-même?
Les navigateurs formulent la chaîne de date différemment.
Netscape ::: ven. Mai 11 2012 20:15:49 GMT-0600 (heure avancée des Rocheuses)
IE ::: ven 11 mai 20:17:33 HAR 2012
vous devrez donc vérifier cela.
var D = new Date().toString().split(' ')[(document.all)?3:4];
Cela établira D égal à la chaîne HH: MM: SS de 24 heures. Divisez cela sur les deux points, et le premier élément sera les heures.
var H = new Date().toString().split(' ')[(document.all)?3:4].split(':')[0];
Vous pouvez convertir des heures de 24 heures en 12 heures, mais cela n’a pas été mentionné. Probablement parce que c'est assez CRAZ Ce que vous faites réellement mathématiquement lorsque vous convertissez des heures En horloges. En fait, vous ajoutez 23, modifiez celapar 12, et ajoutez 1
twelveHour = ((twentyfourHour+23)%12)+1;
Ainsi, par exemple, vous pouvez saisir tout le temps de la chaîne de date, mod Les heures, et afficher tout cela avec les nouvelles heures.
var T = new Date().toString().split(' ')[(document.all)?3:4].split(':');
T[0] = (((T[0])+23)%12)+1;
alert(T.join(':'));
Avec certaines expressions rationnelles intelligentes, vous pouvez probablement extraire les heures de la partie HH: MM: SS De la chaîne de date et les modifier toutes dans la même ligne. Ce serait Une ligne ridicule parce que la référence arrière $ 1 ne pourrait pas être utilisée dans des calculs sans une fonction dans le remplacement.
Voici à quoi cela ressemblerait:
var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/,function(){return ((parseInt(RegExp.$1)+23)%12)+1} );
Ce qui, comme je le dis, est ridicule. Si vous utilisez une bibliothèque qui PEUT effectuer des calculs Sur des références arrière, la ligne devient:
var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/, (($1+23)%12)+1);
Et ce n’est pas vraiment hors de question en tant que code utilisable, si vous le documentez bien…. Cette ligne dit:
Créez une chaîne de date, séparez-la sur les espaces, obtenez la partie navigateur à propos, et remplacez le premier nombre à deux chiffres par ce nombre modé.
Le point essentiel de l'histoire est le moyen de convertir les heures sur 24 heures en heures sur 12 heures. C'est un calcul mathématique non évident:
Vous ajoutez 23, mod par 12, puis ajoutez un de plus.
Voici une petite fonction sympa qui a fonctionné pour moi.
function getDisplayDatetime() {
var d = new Date(); var hh = d.getHours(); var mm = d.getMinutes(); var dd = "AM"; var h = hh;
if (mm.toString().length == 1) {
mm = "0" + mm;
}
if (h >= 12) {
h = hh - 12;
dd = "PM";
}
if (h == 0) {
h = 12;
}
var Datetime = "Datetime: " + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getUTCDate() + " " + h + ":" + mm;
return Datetime + " " + dd;
}
Voici
var myDate = new Date("February 04, 2011 19:00:00");
var hr = myDate.getHours();
var convHrs = "";
var ampmSwitch = "";
ampmSwitch = (hr > 12)? "PM":"AM";
convHrs = (hr >12)? hr-12:hr;
// Build back the Date / time using getMonth/ getFullYear and getDate and other functions on the myDate object. Enclose it inside a func and there you got the working 12 hrs converter ;)
Et voici le convertisseur func pour yas;) Happy coding !!
function convertTo12Hrs(yourDateTime){
var myDate = new Date(yourDateTime);
var dtObject = new Object();
var monthsCollection = {0:"January", 1:"February",2:"March",3:"April",4:"May",5:"June",6:"July",7:"August",8:"September",9:"October",10:"November",11:"December"};
dtObject.year = myDate.getFullYear();
dtObject.month = monthsCollection[myDate.getMonth()];
dtObject.day = (myDate.getDate()<10)?"0"+myDate.getDate():myDate.getDate();
dtObject.minutes = (myDate.getMinutes() < 10)? "0"+myDate.getMinutes():myDate.getMinutes();
dtObject.seconds = (myDate.getSeconds() < 10)? "0"+myDate.getSeconds():myDate.getSeconds();
// Check if hours are greater than 12? Its PM
dtObject.ampmSwitch = (myDate.getHours() > 12)? "PM":"AM";
// Convert the hours
dtObject.hour = (myDate.getHours() > 12)?myDate.getHours()-12:myDate.getHours();
// Add the 0 as prefix if its less than 10
dtObject.hour = (dtObject.hour < 10)? "0"+dtObject.hour:dtObject.hour;
// Format back the string as it was or return the dtObject object or however you like. I am returning the object here
return dtObject;
}
invoquez-le comme convertTo12Hrs ("04 février 2011 19:00:00"); il vous renverra l'objet, que vous pourrez utiliser pour reformater votre chaîne de date/heure à votre guise ...
Vous pouvez essayer cette fonction plus générique:
function to12HourFormat(date = (new Date)) {
return {
hours: ((date.getHours() + 11) % 12 + 1),
minutes: date.getMinutes(),
meridian: (date.getHours() >= 12) ? 'PM' : 'AM',
};
}
Retourne un format d'objet flexible.
J'ai remarqué qu'il y avait déjà une réponse, mais je voulais partager ma propre solution en utilisant du JavaScript pur:
function curTime(pm) {
var dt = new Date();
var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : "");
return time;
}
Vous pouvez le voir en action sur https://jsfiddle.net/j2xk312m/3/ en utilisant le bloc de code suivant:
(function() {
function curTime(pm) {
var dt = new Date();
var hr = dt.getHours(), min = dt.getMinutes(), sec = dt.getSeconds();
var time = (pm ? ((hr+11)%12+1) : (hr<10?'0':'')+hr)+":"+(min<10?'0':'')+min+":"+(sec<10?'0':'')+sec+(pm ? (hr>12 ? " PM" : " AM") : "");
return time;
}
alert("12-hour Format: "+curTime(true)+"\n24-hour Format: "+curTime(false));
})();