JavaScript Местное время печати - PullRequest
2 голосов
/ 23 апреля 2019

Будучи новичком, я сталкиваюсь с некоторыми проблемами. Даже я не могу найти никакого решения, прибегая к помощи.

Проблема: на моем языке (бенгали) весь день имеет пять строк (Сокал, Дюпур, Бикал, Сондха, Раат) вместо двух международных строк (Am, Pm).

Я написал это, но мне не очень помогло.

    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);

Я хочу напечатать:

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;

Ответы [ 4 ]

1 голос
/ 23 апреля 2019

Вы должны сравнивать часы с различными диапазонами, используя реляционные операторы , такие как <, >, <= или >=.Например, если час меньше 6, период равен raat.

Обратите внимание, что вам не обязательно делать два сравнения для каждого диапазона.Если час не меньше 6, вы знаете, что он больше или равен 7, поэтому используйте else, чтобы уменьшить сложность каждого последующего if.

Если я понимаю ваши требования, это выглядело бы примерно так:

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 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();
#out { font-family: monospace }
<input id="in" type="time">
<span id="out"></span>

Конечно, большие умы, чем мой, затратили много времени на решение этой проблемы.Я бы порекомендовал вам взять лут по стандартному методу toLocaleTimeString.Он может не точно соответствовать вашим требованиям, но обычно достаточно близко, чтобы удовлетворить большинство пользователей, и позаботится обо всех более сложных крайних случаях, которые трудно поймать одному разработчику:

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();
span {
  font-family: monospace;
}

span::after {
  content: attr(id);
  padding: 0 1em;
}
<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>

Если вам удобно управлять пакетами npm, вы также можете взглянуть на что-то вроде date-and-time ( попробуйте в RunKit ):

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

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

Опять же, это может быть не точный желаемый результат,но это, вероятно, намного проще и менее подвержено ошибкам, чем попытка реализовать эквивалентную логику самостоятельно.

0 голосов
/ 24 апреля 2019

Вы можете использовать Javascript Libary MomentJs (https://momentjs.com/).

MomentJS имеет поддержку нескольких локалей, например, Bengali.

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'); // বুধ, ২৪ এপ্র ২০১৯, রাত ৯:৫৮ সময়

Если вы используете менеджер пакетов, такой как npm, это оченьлегко интегрировать momentJS в ваше приложение.

Например: npm install moment --save # npm

Или другие менеджеры пакетов:

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)

Пример использования в Node.js:

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

Пример использования в браузере:

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

Кроме того, есть гораздо больше опций для обработки дат с помощью структуры momentJ. Проверьте это: https://momentjs.com/docs/

0 голосов
/ 24 апреля 2019

Немного более короткая альтернатива с массивом поиска:

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 голосов
/ 23 апреля 2019

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)}`);
});
...