javascript - localtime JavaScript本地时间打印

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

问题:在我的语言(孟加拉语)中,整个白天有五个字符串(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;



时间:


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


});

你应该将小时与不同的范围进行比较,使用关系运算符<><=>= 例如如果小时小于 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 দুপুর



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

使用查找数组的稍微短一点的替代项:


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