2
votes

Impression de l'heure locale JavaScript

Étant débutant, je rencontre quelques problèmes. Même moi, je ne trouve aucune solution en la recherchant sur Google.

Problème: dans ma langue (bengali), toute la journée a cinq cordes (Sokal, Dupur, Bikal, Sondha, Raat) au lieu des deux cordes internationales (Am, Pm).

J'ai écrit celui-ci, mais ne m'a pas beaucoup aidé.

6Am to 11Am as 06:00 Sokal;
12Pm to 3pm as 12:00 Dupur;
4 Pm to 5Pm as 04:00 Bikal;
6 pm to 7pm as 06:00 Sondha;
8 pm to 5Am as 08:00 Raat;

Je veux imprimer:

    var time = new Date();

    var hour = time.getHours();
    var text = "sokal";

    if(hour == 13){
      text = "dupur";
    }else if(hour == 16){
      text = "bikal";
    }else if(hour == 18){
     text = "sondha"; 
    }else if(hour == 20){
      text = "raat"
    }

    console.log(text);


1 commentaires

Vérifiez une plage: if (hour> = 12 && hour <= 15) text = "Dupur"; etc.


4 Réponses :


0
votes

function getHourName(hour){
if(hour > 11 && hour < 16){
   return "Dupur"
}
if(hour > 15 && hour < 18){
   return "Bikal"
}
if(hour > 17 && hour < 20){
   return "Sondha"
}
if(hour > 19 || hour < 6){
   return "Raat"
}
if(hour > 5 && hour < 12){
   return "Sokal"
}
}

Array.from({ length: 24 }).forEach((_, hour) => {
  console.log(`${hour}:00-${hour}:59 ${getHourName(hour)}`);
});


4 commentaires

hour => 20 && hour <= 5 échouera de 12h à 5h


J'attendais "Raat" à l'heure actuelle (02:38:52). mais il a renvoyé "Dupur"


D'accord, réparé. Désolé pour mon erreur :)


Peut-être qu'il a besoin d'un autre changement. Pouvez-vous vérifier la deuxième ligne?



1
votes

Vous devriez comparer l'heure à différentes plages, en utilisant opérateurs relationnels tels que , > , ou > = . Par exemple, si l'heure est inférieure à 6, la période est raat .

Notez également que vous n'avez pas nécessairement besoin de faire deux comparaisons pour chaque plage. Si l'heure n'est pas inférieure à 6, vous savez qu'elle est supérieure ou égale à 7, alors profitez du else pour réduire la complexité de chaque suivant si .

Si je comprends vos exigences, cela ressemblerait à quelque chose comme ceci:

var date = require("date-and-time");

let now = new Date();
date.locale('bn');
date.format(now, 'HH:mm A');
// 16:33 দুপুর

Le formatage précis des dates peut être assez impliqué avec différents paramètres régionaux -des règles spécifiques, mais encore une fois, en fonction de ce que vous avez décrit, voici un essai:

<input id="in" type="time"><br>
<span id="en-US"></span><br>
<span id="bn"></span><br>
<span id="bn-u-hc-h24"></span><br>
span {
  font-family: monospace;
}

span::after {
  content: attr(id);
  padding: 0 1em;
}
const outputs = ['en-US', 'bn', 'bn-u-hc-h24'];

var input = document.getElementById("in");

function formatOutput() {
  const date = new Date(`01 Jan 1970 ${input.value}`);
  outputs.forEach(id => {
    const output = document.getElementById(id);
    output.innerText = date.toLocaleTimeString(id);
  });
}

input.addEventListener('change', formatOutput);

input.value = `${new Date().getHours()}:${new Date().getMinutes()}`;
formatOutput();

Bien sûr, des esprits plus grands que le mien ont consacré beaucoup de temps à résoudre ce genre de problème. Je vous recommande de prendre un butin au standard Méthode toLocaleTimeString . Cela peut ne pas exactement répondre à vos besoins, mais il est généralement assez proche pour satisfaire la plupart des utilisateurs et prendra en charge tous les cas extrêmes plus compliqués qu'il est difficile pour un développeur catch:

<input id="in" type="time">
<span id="out"></span>
#out { font-family: monospace }
function fmtPeriod(hour) {
  if (hour < 6) {
    return "Raat";
  } else if (hour < 12) {
    return "Sokal";
  } else if (hour < 16) {
    return "Dupur";
  } else if (hour < 18) {
    return "Bikal";
  } else if (hour < 20) {
    return "Sondha";
  } else {
    return "Raat"
  }
}

function fmtHour(hour) {
  return `0${hour % 12 || 12}`.substr(-2);
}
function fmtMinutes(minutes) {
  return `0${minutes}`.substr(-2);
}

var input = document.getElementById("in");
var output = document.getElementById("out");

function formatOutput() {
   const date = new Date("01 Jan 1970 " + input.value);
   const hour = date.getHours();
   const min = date.getMinutes();
   output.innerText = `${fmtHour(hour)}:${fmtMinutes(min)} ${fmtPeriod(hour)}`
}

input.addEventListener('change', formatOutput);

input.value = `${new Date().getHours()}:${new Date().getMinutes()}`;
formatOutput();

Si vous êtes à l'aise avec la gestion des packages npm, vous pouvez également jeter un œil à quelque chose comme date et heure ( essayez dans RunKit ):

function fmtPeriod(hour) {
  if (hour < 6) {
    return "Raat";
  } else if (hour < 12) {
    return "Sokal";
  } else if (hour < 16) {
    return "Dupur";
  } else if (hour < 18) {
    return "Bikal";
  } else if (hour < 20) {
    return "Sondha";
  } else {
    return "Raat"
  }
}

Encore une fois, ce n'est peut-être pas le exact résultat souhaité, mais c'est probablement beaucoup plus facile et moins sujet aux erreurs que d'essayer d'implémenter vous-même la logique équivalente.


4 commentaires

Peut-être n'ai-je pas été en mesure de le préciser. En fait, je m'attends à quelque chose comme ceci: L'heure actuelle devrait apparaître comme: (02:44:53 Raat) au lieu de (02:44:53 AM). Edit: je suis trop proche de ma réponse. J'ai juste besoin de changer les deux dernières lignes pour ne pouvoir obtenir qu'une seule valeur à la fois.


@KBTonmoy J'ai restructuré ma réponse pour que vous puissiez, espérons-le, avoir une idée plus claire de ce qui se passe. J'ai également essayé de fournir d'autres suggestions sur la façon dont vous pourriez peut-être aborder ce problème différemment.


Tu es incroyable. J'ai besoin d'une autre faveur. Pouvez-vous s'il vous plaît changer le champ de saisie avec uniquement la syntaxe Document.write? Je souhaite utiliser le script dans le script d'action d'Adobe Flash.


@KBTonmoy La démo ne fonctionnerait pas vraiment dans ce cas, mais tout ce que vous auriez à faire dans votre code est de remplacer output.innerText = ...; par document.write (. ..);



0
votes

Une alternative un peu plus courte avec un tableau de recherche:

function format(date) { 
   var arr = ['Sokal', 'Sokal', 'Sokal', 'Dupur', 'Dupur', 'Bikal', 'Sondha'];
   return date.toJSON().slice(11, 19) + ' ' + (arr[date.getUTCHours() - 6 >> 1] || 'Raat');
}

for (var i = 0; i < 24; i++)
   console.log( format( new Date('0 ' + i + ':0Z') ) )


0 commentaires

0
votes

Vous pouvez utiliser la bibliothèque JavaScript MomentJs ( https://momentjs.com/ ).

MomentJS prend en charge plusieurs paramètres régionaux, par exemple Bengali.

<script src="moment.js"></script>
<script>
    moment().format();
</script>

Si vous utilisez un gestionnaire de paquets comme npm, il est très facile d'intégrer momentJS dans votre application.

Par exemple: npm install moment --save # npm

Ou d'autres gestionnaires de packages:

npm install moment
var moment = require('moment');
moment().format();

Exemple d'utilisation dans Node.js:

yarn add moment             # Yarn
Install-Package Moment.js   # NuGet
spm install moment --save   # spm
meteor add momentjs:moment  # meteor
bower install moment --save # bower (deprecated)

Exemple d'utilisation dans le navigateur:

moment.locale();         // bn
moment().format('LT');   // রাত ৯:৫৮ সময়
moment().format('LTS');  // রাত ৯:৫৮:৩৪ সময়
moment().format('L');    // ২৪/০৪/২০১৯
moment().format('l');    // ২৪/৪/২০১৯
moment().format('LL');   // ২৪ এপ্রিল ২০১৯
moment().format('ll');   // ২৪ এপ্র ২০১৯
moment().format('LLL');  // ২৪ এপ্রিল ২০১৯, রাত ৯:৫৮ সময়
moment().format('lll');  // ২৪ এপ্র ২০১৯, রাত ৯:৫৮ সময়
moment().format('LLLL'); // বুধবার, ২৪ এপ্রিল ২০১৯, রাত ৯:৫৮ সময়
moment().format('llll'); // বুধ, ২৪ এপ্র ২০১৯, রাত ৯:৫৮ সময়

De plus, il y a beaucoup plus d'options pour gérer les dates avec le framework momentJs. Découvrez-le: https://momentjs.com/docs/


1 commentaires

En fait, je souhaite exécuter le script dans Adobe Flash Actionscript. Je n'ai trouvé aucun moyen d'intégrer Momentjs dans un fichier Flash. Au fait, cela m'aidera sûrement à l'avenir.