JavaScript本地时间打印

问题描述 投票:2回答:4

作为初学者,我遇到了一些问题。即便通过谷歌搜索找不到任何解决方案。

问题:在我的语言(孟加拉语)中,整个白天有五个字符串(Sokal,Dupur,Bikal,Sondha,Raat)而不是国际两个字符串(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;
javascript localtime
4个回答
1
投票

你应该将小时与不同的范围进行比较,使用relational operators<><=。例如,如果小时小于6,则周期为>=

另请注意,您不一定需要为每个范围进行两次比较。如果小时不小于6,你知道它大于或等于7,所以利用raat来降低每个后续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;
}

如果您对管理npm软件包感到满意,还可以查看<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>date-and-time)之类的内容:

try in RunKit

同样,这可能不是您想要的确切结果,但它可能比尝试自己实现等效逻辑更容易,更容易出错。


0
投票

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

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

0
投票

使用查找数组的更短的替代方案:

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

0
投票

您可以使用Javascript Library Moment Js(qazxsw poi)。

MomentJS有多种语言环境支持,例如孟加拉语。

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

如果您使用像npm这样的包管理器,那么很容易将momentJS集成到您的应用程序中。

例如:npm install moment --save #npm

或其他包管理员:

https://momentjs.com/

Node.js中的示例用法:

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

浏览器中的示例用法:

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)

此外,还有更多选项可以使用momentJs框架处理日期。看看:npm install moment var moment = require('moment'); moment().format();

© www.soinside.com 2019 - 2024. All rights reserved.