将数据从php foreach循环传递到javascript

时间:2020-06-24 08:40:33

标签: javascript php foreach html-table countdowntimer

我正在尝试将JavaScript倒计时添加到表中,该表位于php foreach中
我的php代码是这样的:

<?php
    global $wpdb, $indeed_db;
    $user = wp_get_current_user();
    $userid = $user->ID; 
    $woo_orders = $wpdb->get_results("SELECT * FROM wp8u_wc_order_product_lookup");
    foreach ($woo_orders as $print ){
        $order_id = $print->order_id; 
        $woo_customer_id = $print->customer_id;  
        $woo_customer = $wpdb->get_results("SELECT * FROM wp8u_wc_customer_lookup where customer_id=$woo_customer_id");
        foreach($woo_customer as $print2){
            $current_user_uid = $print2->user_id;
        }
        $date1 = strtotime($print->date_created);
        $date2 = strtotime("+1 months", $date1);
        $date_created = date('Y-m-d H:i:s', $date1);                                    
        $date_after = date('Y-m-d H:i:s', $date2);                                   
        $amount = $print->product_net_revenue;                                                                      
        if($userid == $current_user_uid){                                               
                ?><table>
                    <tr>
                        <th>Order ID</th>
                        <th>My ID</th>
                        <th>My Customer ID</th>
                        <th>Create Date</th>
                        <th>Date After 1 Month</th><
                        <th>Amount</th>
                    </tr>
                    <tr>
                        <td><?php echo "$order_id";?></td>
                        <td><?php echo "$current_user_uid";?></td>
                        <td><?php echo "$woo_customer_id";?></td>
                        <td><?php echo "$date_created";?></td>
                        <td><?php echo "$date_after";?></td>
                        <td><?php echo "$amount";?></td>
                        <td id="demo2"></td>
                    </tr>
                </table><?php
             }
}
 ?>

这是我上面的php代码的输出:

Order ID |  My ID | My Customer ID |    Create Date         |   After 1 month       |   Amount   |   Timer  |
126         37          9               2020-06-24 13:45:35     2020-07-24 13:45:35     3000
Order ID |  My ID | My Customer ID |    Create Date         |   After 1 month       |   Amount   |   Timer  |
123         37          9               2020-06-22 12:01:14     2020-07-22 12:01:14     1000    

因此,我试图在“计时器”列下的两行中添加倒数计时器
这是我的Java脚本倒数计时器代码:

<script>
    function createCountDown(elementId, date){
        var countDownDate = new Date(date).getTime();
        var x = setInterval(function(){
            var now = new Date().getTime();
            var distance = (countDownDate) - (now);
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);
            document.getElementById(elementId).innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
            if (distance < 0)
            {
              clearInterval(x);
              document.getElementById(elementId).innerHTML = "SUCCESS";
            }
        }, 1000);
    }createCountDown("demo", <?php echo "$date_after"; ?>)
</script>

如何将此JavaScript倒数计时器添加到表中?

2 个答案:

答案 0 :(得分:0)

尝试一下:

createCountDown("demo", <?= "'{$date_after}'"; ?>)

答案 1 :(得分:0)

我迅速完成了一个演示,展示了如何在不使用ID属性的情况下实现目标。我假设表中的每一行都应该显示一个倒数计时器? sql,btw,看起来像是join的合适候选者-这意味着只使用一个查询,但这完全是另一回事–只是以为我提到过。

如果您复制/运行此程序,则应该了解其工作原理-生成的表包含伪数据。

<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title></title>
        <style>
            body{font-family:monospace}
            table{margin:0 auto 3rem auto;width:60%;float:none;border:1px solid gray;}
            th{background:gray;color:white}
            .timer{color:red}
        </style>
        <script>
            /*
                The function now accepts a DOM element as the first argument
                rather than a string to represent the ID of a DOM element.
                The original element has had it's ID replaced with a className
                and, to make DOM navigation easier, the table-cell that holds
                the date used in the countdown also has a className assigned.
            */
            function createCountDown(n, date){
                var countDownDate = new Date( date ).getTime();
                var x = setInterval( function(){
                    var now = new Date().getTime();
                    var distance = countDownDate - now;
                    
                    var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                    var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                    var seconds = Math.floor((distance % (1000 * 60)) / 1000);
                    
                    n.innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
                    
                    if( distance < 0 ) {
                        if( !isNaN( x ) )clearInterval( x );
                        n.innerHTML = "SUCCESS";
                    }
                }, 1000 );
            }
            
            /*
                Using the `.timer` className find a collection of all table-cells
                that will display a countdown.
                
                Iterate through that nodelist collection, find the sibling row 
                with the date and assign the countdown.
            */
            document.addEventListener( 'DOMContentLoaded',()=>{
                Array.from( document.querySelectorAll( 'td.timer' ) ).forEach( td=>{
                    /*
                        find the sibling table-cell according to it's assigned className
                        and thus obtain the cell contents. Supply both as arguments to the
                        `createCountDown` function
                    */
                    let expiry_date=td.parentNode.querySelector( '.expiry' ).textContent;
                    createCountDown( td, expiry_date );
                });
            });
        </script>
    </head>
    <body>
        <?php
            for( $i=1; $i <= 5; $i++ ){
            
                $h=mt_rand(8,18);
                $m=mt_rand(1,59);
                $s=mt_rand(1,59);
                $month=date('m');
                $day=mt_rand(1,29);
                $year=2020;
                
                $created=date('Y-m-d H:i:s',mktime($h,$m,$s,$month,$day,$year));
                $expires=date('Y-m-d H:i:s',mktime($h,$m,$s,$month+1,$day,$year));
                
                printf(
                    '
                    <table>
                        <tr>
                            <th>Order ID</th>
                            <th>My ID</th>
                            <th>My Customer ID</th>
                            <th>Create Date</th>
                            <th>Date After 1 Month</th>
                            <th>Amount</th>
                            <th>Countdown</th>
                        </tr>
                        <tr>
                            <td>$order_id</td>
                            <td>$current_user_uid</td>
                            <td>$woo_customer_id</td>
                            <td>%s</td>
                            <td class="expiry">%s</td>
                            <td>$amount</td>
                            <td class="timer"></td>
                        </tr>
                    </table>
                    ',
                    $created,
                    $expires
                );
            }
        ?>
    </body>
</html>