Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用for循环而不是大型if语句通过jQuery追加信息_Javascript_Jquery_Mysql_Sql_While Loop - Fatal编程技术网

Javascript 使用for循环而不是大型if语句通过jQuery追加信息

Javascript 使用for循环而不是大型if语句通过jQuery追加信息,javascript,jquery,mysql,sql,while-loop,Javascript,Jquery,Mysql,Sql,While Loop,我有一个名为bike_main的表,其中包含“time”和“id”列,我使用这个表通过mySQL获取最忙的时间 MySQL 这将返回17个HTML格式 HTML 但是我不希望有一个非常大的if语句,而是希望它通过一个循环运行,这个循环将检测值并返回它各自的值。我试过: JavaScript var hour = 1; var nextHour = hour+1; while (hour < 24) { console.log('hour is ' + hour); con

我有一个名为bike_main的表,其中包含“time”和“id”列,我使用这个表通过mySQL获取最忙的时间

MySQL

这将返回17个HTML格式

HTML

但是我不希望有一个非常大的if语句,而是希望它通过一个循环运行,这个循环将检测值并返回它各自的值。我试过:

JavaScript

var hour = 1;
var nextHour = hour+1;

while (hour < 24) {
    console.log('hour is ' + hour);
    console.log('next hour is ' + nextHour);

    if ($('#busierHour').text() == hour && hour > 12) {
        console.log('IF STATEMENT RAN!!');
        $('#busierHour').val(hour + '-' + nextHour + ' AM');
    } else if ($('#busierHour').text() == hour && hour > 24) {
        console.log('SECOND RAN');
$('#busierHour').val(hour + '-' + nextHour + ' PM');
    }
    hour++;
    nextHour++;
}
var小时=1;
var nextHour=小时+1;
而(小时<24小时){
console.log('小时为'+小时);
console.log('下一个小时是'+nextHour);
if($('#busierHour').text()==小时和小时>12){
log('IF语句运行!!');
$('busierHour').val(hour+'-'+nextHour+'AM');
}else if($('#busierHour').text()==hour&&hour>24){
log(“第二次运行”);
$('busierHour').val(hour+'-'+nextHour+'PM');
}
小时++;
nextHour++;
}

运行上述JavaScript时,变量返回正确(小时为1,下一小时为2,小时为2,下一小时为3等),但控制台在记录“下一小时为18”后记录“IF STATEMENT RAN!!”。控制台应记录“第二次运行”。“#busierHour”中的任何文本更改都没有。

使用关联数组

$hour = array(1=>'1-2am',2=>'2-3am',3=>'3-4am' .... , 17=>'5-6pm');

<h3 id="busierHour"><?php echo $hour[$row['h']]; ?></h3>
$hour=array(1=>'1-2am',2=>'2-3am',3=>'3-4am',17=>'5-6pm');

你可以计算它,比如

$('#busierHour').text(function(_, txt) {
    var hour = parseInt(txt, 10);
    var ampm = 'AM';

    if ( hour > 12 ) {
        ampm = 'PM'    
        hour = hour - 12;
    }

    return hour + ' - ' + (hour+1) +  ampm;
});
如果在输出数据之前使用PHP进行操作,则更容易

$timestamp = strtotime( $datestring_from_db );
$ampm_date = date("h.i A", $timestamp);

下面是一个简单的计算

var busierHour = parseInt($('#busierHour').text());
var retString = '';

if(busierHour > 12){
   retString = (busierHour - 12) + ' - ' + (busierHour - 11) + 'PM';
}
else{
   retString = (busierHour) + ' - ' + (busierHour + 1) + 'AM';
}

让您的查询格式化结果:

SELECT 
 DATE_FORMAT(date, '%l')+
 '-'+
 DATE_FORMAT(DATE_ADD(date, INTERVAL 1 HOUR), '%l%p') AS h 
FROM bike_main GROUP BY h ORDER BY count(*) DESC LIMIT 1

为什么在输出之前不先用PHP进行转换?@pmandell我在JavaScript/jQuery方面比在PHP方面经验丰富得多,所以我从来没有想到过这点。@GGio你能详细说明一下吗?是MySQL查询吗?
$timestamp = strtotime( $datestring_from_db );
$ampm_date = date("h.i A", $timestamp);
var busierHour = parseInt($('#busierHour').text());
var retString = '';

if(busierHour > 12){
   retString = (busierHour - 12) + ' - ' + (busierHour - 11) + 'PM';
}
else{
   retString = (busierHour) + ' - ' + (busierHour + 1) + 'AM';
}
SELECT 
 DATE_FORMAT(date, '%l')+
 '-'+
 DATE_FORMAT(DATE_ADD(date, INTERVAL 1 HOUR), '%l%p') AS h 
FROM bike_main GROUP BY h ORDER BY count(*) DESC LIMIT 1