如何用javascript创建一个包含小时和分钟的数组
How to create an array with hours and minutes in javascript?
我正在尝试创建一个时间数组,类似于:
1:00
1:15
1:30
1:45
2:00
2:15
...
这是我的代码,它的作用是从当前时间开始向上:
var timeArray = [];
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
for (var i = h; i <= 24; i++) {
for (var j = m; j <= 59; j++) {
if (j % 15 === 0) {
j = j === 0 ? '00' : j;
if (i >= 12) {
timeArray.push((i - 12) + ':' + j + ' PM');
} else {
timeArray.push(i + ':' + j + ' AM');
}
}
}
}
问题是,如果m
超过46
,就像var m = 50;
一样,那么数组变空,因为j % 15
不再为0。
一个如何解决这个问题的想法?
感谢
如果你想要的是一个数组["1:00","1:15",…],那么为什么不直接构建它呢?这与";小时";以及";分钟";,仅与";得到一些明显的连续数";右图:
cost arr = [];
for (let i=0; i < 24; i++) {
for (let j=0; j < 4; j++) {
arr.push(`${i}:${j === 0 ? `00` : 15*j}`);
}
}
完成。查找离15分钟街区最近的当前时间:
const d = new Date(),
h = d.getHours(),
m = 15 * Math.floor(d.getMinutes() / 15),
stamp = `${h}:${m === 0 ? `00` : m}`;
只需重新排序时隙:
const pos = arr.indexOf(stamp);
let timelist = [];
if (pos > -1) {
timelist = [
...arr.slice(pos),
...arr.slice(0,pos)
];
}
试试这个:
var timeArray = [],
d = new Date(),
h = d.getHours(),
m = d.getMinutes(),
meridiem = ['AM','PM'];
for (var i = h; i < 24; ++i) {
for (var j = i==h ? Math.ceil(m/15) : 0; j < 4; ++j) {
timeArray.push(i%12 + ':' + (j*15||'00') + ' ' + meridiem[i/12|0]);
}
}
一行:
const arr = Array(24 * 4).fill(0).map((_, i) => { return ('0' + ~~(i / 4) + ': 0' + 60 * (i / 4 % 1)).replace(/'d('d'd)/g, '$1') });
我的解决方案有点冗长,但它也为您提供了相关的时间值,这在某些情况下可能很有用。
const getTimeBlocks = () => {
const minutesInDay = 1440;
const timeBlocksArr = [{ timeString: '12:00 AM', timeValue: '0' }];
for (let i = 30; i <= minutesInDay - 30; i += 30) {
const halfHourInLoop = i / 60;
let formattedBlock = String(halfHourInLoop);
const hour = formattedBlock.split('.')[0];
const minute = i % 60 === 0 ? '00' : '30';
formattedBlock = `${hour}:${minute}`;
const today = new Date();
const timeString = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
Number(hour),
Number(minute),
);
timeBlocksArr.push({
timeString: timeString.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }),
timeValue: formattedBlock,
});
}
return timeBlocksArr;
};
console.log(getTimeBlocks());
我认为通过使用JavaScriptDateneneneba API和一个简单的技巧,您可以做得更简单。
在循环中,您只需要在时间戳和打印上添加15*60秒(一刻钟)。一开始只计算最接近的完整时间(11:57->12:00),然后根据需要添加四分之一。
请参阅代码:
var date, array = [];
date = new Date();
// Here we will find the closest time
// If it's 13:09 we'll iterate to 13:15 and stop
//
// We'll iterate fifteen times in the worst case scenario
while (date.getMinutes() % 15 !== 0) {
date.setMinutes ( date.getMinutes() + 1 );
}
// A whole day has 24 * 4 quarters of an hour
// Let's iterate using for loop
for (var i = 0; i < 24 * 4; i++) {
array.push(date.getHours() + ':' + date.getMinutes());
date.setMinutes ( date.getMinutes() + 15);
}
console.log(array);
// Now in Poland it's 18:10 so the result is an array of 96 elements
// ["18:15", "18:30", "18:45", "19:0", ... "17:30", "17:45", "18:0"]
// As you may noticed, there is a need to format date when it's a full hour.
// We have 18:0 but we expect 18:00. This will be more understandable for users.
// We can open another discussion to find the best way to do that ;)
主要问题是内部循环(j
)从m
变量开始,并且在一天中的大多数时间可能不是零。所以对于i
的第一个循环,这是可以的。但对于下一个循环,你希望它为零。可以通过在循环的i
结束时将m
变量赋值为零来解决此问题。
尽量不要将用于计算的变量(整数)与用于格式化时间的变量(字符串)混合使用。你在这里为j
做这件事:
j = j === 0 ? '00' : j;
以下是我要使用的代码(我还固定了午夜12点的AM,并通过简单地增加15而不是1来跳过j的大部分迭代):
var timeArray = [];
var d = new Date();
var h = d.getHours();
var m = Math.ceil(d.getMinutes() / 15) * 15;
for (var i = h; i <= 24; i++) {
for (var j = m; j <= 59; j += 15) {
var mf = j === 0 ? '00' : j;
var hf = i >= 12 ? (i - 12) : i;
var amPm = i >= 12 && i < 24 ? 'PM' : 'AM';
timeArray.push(hf + ':' + mf + ' ' + amPm);
}
m = 0;
}
试试这个
var timeArray = [];
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
for(var i=0; i< 24; i++){
for(m = (m + 15 - m%15)%60; m < 60; m = m + 15){
timeArray.push(h + ':' + m);
}
h = (h+1) % 24;
timeArray.push(h + ':' + '00');
}
console.log(timeArray);
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 货币代码为欧元-金额的格式不应包含小数
- 如何包含特定于每个视图angularjs的javascript文件
- 我如何修复包含在captcha的addthis中的错误
- 正在注入包含JS的HTML
- Json数据包含日期和时间格式
- Angular js-返回一个包含类似
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- jQuery/JS包含运算符或类似运算符
- 如果href包含X,请更改href
- JavaScript数组包含一个值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 如何在iOS应用程序中从Firebase中删除超过6小时的数据
- 如何在调整窗口大小时重新加载网页,并且仅当它包含特定的 HTML 元素时
- 当屏幕达到一定大小时,如何包含JavaScript文件
- 使用moment js创建一个包含一周中的几天和一天中的几个小时的数组
- 如何用javascript创建一个包含小时和分钟的数组
- 转换字符串包含时间到24小时的时间,我可以做数学与- jQuery