JavaScript 当地时间打印
JavaScript Local Time printing
作为初学者,我遇到了一些问题。即使我通过谷歌搜索也找不到任何解决方案。
问题:在我的语言(孟加拉语)中,整个白天有五个字符串(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)}`);
});
您应该将小时与不同的范围进行比较,使用 relational operators,例如 <
、>
、<=
或 >=
。例如,如果小时小于 6,则周期为 raat
。
另请注意,您不一定需要对每个范围进行两次比较。如果小时不小于6,你知道它大于或等于7,所以利用else
减少每个后续[=24=的复杂性].
如果我理解您的要求,它看起来应该是这样的:
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
(try in 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') ) )
您可以使用 Javascript 库 MomentJs (https://momentjs.com/)。
MomentJS 支持多种语言环境,例如孟加拉语。
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 安装时刻 --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>
此外,还有更多选项可以使用 momentJs 框架处理日期。检查一下:https://momentjs.com/docs/
作为初学者,我遇到了一些问题。即使我通过谷歌搜索也找不到任何解决方案。
问题:在我的语言(孟加拉语)中,整个白天有五个字符串(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)}`);
});
您应该将小时与不同的范围进行比较,使用 relational operators,例如 <
、>
、<=
或 >=
。例如,如果小时小于 6,则周期为 raat
。
另请注意,您不一定需要对每个范围进行两次比较。如果小时不小于6,你知道它大于或等于7,所以利用else
减少每个后续[=24=的复杂性].
如果我理解您的要求,它看起来应该是这样的:
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
(try in 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') ) )
您可以使用 Javascript 库 MomentJs (https://momentjs.com/)。
MomentJS 支持多种语言环境,例如孟加拉语。
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 安装时刻 --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>
此外,还有更多选项可以使用 momentJs 框架处理日期。检查一下:https://momentjs.com/docs/