简体   繁体   English

Javascript 正则表达式 一位十进制

[英]Javascript Regex One Decimal

......... Javascript function ......... Javascript function

  function isNumberKey(evt)
       {
          var charCode = (evt.which) ? evt.which : evt.keyCode;
          if (charCode != 46 && charCode > 31 
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
       }

this works well with numbers but for decimal it allows multiple decimals.这适用于数字,但对于十进制它允许多个小数。 i just want one decimal.我只想要一位小数。 thanks in advance提前致谢

I use data-attributes here我在这里使用数据属性

Change date-start and date-end with $Ldate and $Bdate使用 $Ldate 和 $Bdate 更改日期开始和日期结束

But we need today's date somewhere no?但是我们需要今天的日期,不是吗?

 var x = setInterval(function() { [...document.querySelectorAll(".date")].forEach(el => { var diff = new Date(el.getAttribute("date-end")).getTime() - new Date().getTime(); // or date-end? // Time calculations for days, hours, minutes and seconds var days = Math.floor(diff / (1000 * 60 * 60 * 24)); var hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((diff % (1000 * 60)) / 1000); el.innerHTML = diff < 0? "EXPIRED": days + "d " + hours + "h " + minutes + "m " + seconds + "s "; }) }, 1000);
 <table> <tbody> <tr> <td class='center'><i class='fa fa-database fa-3x' aria-hidden='true'></i>Server row 1</td> <td><i class='fa fa-line-chart fa-3x'></i>Profit row 1</td> <td><i class='fa fa-refresh fa-spin fa-3x fa-fw'></i><span class="date" date-start="2019-11-13 10:00:00" date-end="2020-01-01 10:00:00"></span></td> </tr> <tr> <td class='center'><i class='fa fa-database fa-3x' aria-hidden='true'></i>Server row 2</td> <td><i class='fa fa-line-chart fa-3x'></i>Profit row 2</td> <td><i class='fa fa-refresh fa-spin fa-3x fa-fw'></i><span class="date" date-start="2019-11-11 10:00:00" date-end="2019-12-01 10:00:00"></span></td> </tr> </tbody> </table>

I made an assumption that the display for the countdown should be associated to the row in the HTML table that is being rendered so if you assign a dataset attibute that refers to the element to be used as output one can easily target it via javascript.我假设倒计时的显示应该与正在呈现的 HTML 表中的行相关联,因此,如果您分配一个dataset属性,该数据集属性指的是要用作 output 的元素,则可以通过 ZDE9B9ED78D7E2E919ZEEF2 轻松定位它。 By assigning an attribute that combines the two relevant dates you can fudge around with those to set the start/end dates within the function body - assigned after the loop for convenience here.通过分配一个结合了两个相关日期的属性,您可以在 function 正文中设置开始/结束日期 - 为方便起见,在循环之后分配。

<?php

    while($row = mysqli_fetch_assoc($WltQRslt)){
        $Ldate = $row['LastDate'];
        $Bdate = $row['DateBought'];
        $id=sprintf('%s_%s',$Ldate,$Bdate);

        echo "
        <tr>
            <td class='center'>
                <i class='fa fa-database fa-3x' aria-hidden='true'></i>&nbsp;&nbsp;&nbsp;&nbsp;{$row['Server']}
            </td>
            <td>
                <i class='fa fa-line-chart fa-3x'></i>&nbsp;&nbsp;&nbsp;&nbsp;{$row['Profit']}
            </td>
            <td>
            <i class='fa fa-refresh fa-spin fa-3x fa-fw'></i>&nbsp;&nbsp;&nbsp;&nbsp;
                <div class='countdown' data-id='{$id}'></div>
            </td>
        </tr>";
    }

?>

<script>
    const countdown=function( id ){
        const INTERVAL=1000;
        const difference=function(n){
            let d=Math.floor( n / ( 1000 * 60 * 60 * 24 ) );
            let h=Math.floor( ( n % ( 1000 * 60 * 60 * 24 ) ) / ( 1000 * 60 * 60 ) );
            let m=Math.floor( ( n % ( 1000 * 60 * 60 ) ) / ( 1000 * 60 ) );
            let s=Math.floor( ( n % ( 1000 * 60 ) ) / 1000 );
            return d + "d " + h + "h " + m + "m " + s + "s";
        };

        let ldate=new Date( id.split('_')[0] ).getTime();
        let bdate=new Date( id.split('_')[1] ).getTime();

        let tx=setInterval( ()=>{
            bdate -= INTERVAL;
            let distance=ldate - bdate;

            let node=document.querySelector( 'div[ data-id="'+id+'" ]' );
                node.textContent=difference( distance );

            if( distance < 0 ){
                clearInterval( tx );
                node.textContent='EXPIRED';
            }
        },INTERVAL );
    }


    Array.from( document.querySelectorAll('div.countdown') ).forEach( div=>{
        countdown( div.dataset.id )
    });
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM