2017-04-26 1 views
4

Je souhaite que ma page Web affiche la date et l'heure dans les paramètres régionaux de l'utilisateur.Javascript - obtenir les paramètres régionaux en cours en utilisant Intl pour afficher l'heure et la date

Il semble que Intl est maintenant supporté par la plupart des navigateurs (voir Can I Use Intl). Je peux acquérir le fuseau horaire du navigateur très bien en utilisant Intl.DateTimeFormat().resolvedOptions().timeZone. J'espérais je serai en mesure d'émettre une date-heure à l'aide de mon lieu actuel, en faisant:

var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    undefined, // locale 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

J'utilise Chrome sur Windows. Mes paramètres régionaux du système d'exploitation Windows sont définis sur "République tchèque". La langue de mon site préféré est "Tchèque" dans Chrome, mais le navigateur lui-même est configuré pour utiliser l'anglais américain.

Avec ces paramètres, la sortie est effectuée au format 12 H, comme si mes paramètres régionaux étaient en-us. Dès que je passe mon navigateur Chrome pour utiliser le tchèque comme langue de présentation, l'heure passe au format 24.

Je pense que je dois manquer quelque chose d'évident - est-ce que la page Web est vraiment incapable d'utiliser l'environnement local utilise, ou est-ce un bug ou une incomplétude dans l'implémentation de Chrome Intl?

Répondre

0

J'ai trouvé le suivant est plus fiable sur Chrome: on peut utiliser navigator.languages[0] pour obtenir les paramètres régionaux définis par la langue que l'utilisateur préfère pour le contenu. Voir aussi Best way to determine user's locale within browser pour une discussion concernant la compatibilité du navigateur.

function getLocale() { 
 
    return (navigator.languages && navigator.languages.length) ? navigator.languages[0] : navigator.language; 
 
} 
 

 

 
var locale = getLocale(); 
 
var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    locale, 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

il semble encore une honte on ne peut pas accéder au système large choix de l'utilisateur locale a fait.