Rumah  >  Artikel  >  hujung hadapan web  >  Masa pelayan penyegerakan Javascript dan tip kira detik penyegerakan_kemahiran javascript

Masa pelayan penyegerakan Javascript dan tip kira detik penyegerakan_kemahiran javascript

WBOY
WBOYasal
2016-05-16 15:38:042605semak imbas

Saya melihat seseorang bertanya di Internet cara memaparkan masa pelayan secara serentak pada halaman Sebenarnya, terdapat beberapa cara untuk mencapainya dengan segera bahawa mereka boleh menggunakan Ajax untuk meminta pelayan setiap saat kemudian dapatkan masa dari pelayan Dipaparkan pada halaman, walaupun ini boleh dicapai, terdapat masalah besar, iaitu, meminta pelayan setiap saat, jadi jika terdapat terlalu ramai pengguna, pelayan akan ranap (penggunaan memori akan menjadi sangat besar), jadi dalam kes saya Nampaknya kaedah ini tidak boleh dilaksanakan Di sini saya akan memberikan anda penyelesaian yang boleh menyegerakkan masa dan undur pelayan tanpa mengambil terlalu banyak sumber pelayan Di bawah saya akan menulis idea pelaksanaan :

Langkah pertama, Apabila pengguna menyemak imbas halaman untuk kali pertama, pelayan terlebih dahulu memperoleh masa semasa dan memaparkannya pada halaman (contohnya: dipaparkan dalam rentang kotak masa dengan ID)

Langkah kedua, Tetapkan masa baharu untuk dikira setiap saat (masa baharu menggunakan masa pelayan sebagai nilai awal, kemudian terkumpul satu saat setiap saat dan menjana masa baharu)

Langkah ketiga, paparkan masa yang dikira dalam langkah kedua

Bukankah ini sangat mudah? Ia boleh disimpulkan dalam satu ayat: ambil masa pelayan sebagai nilai awal, dan kemudian secara automatik menambah satu saat untuk menjana masa baharu pada halaman setiap saat masa pelayan, dan ralat pada dasarnya Dalam beberapa saat, ia sepatutnya baik. Mari kita lihat kod yang dilaksanakan:

<span id="timebox">11:21:55</span> //第一次将服务器时间显示在这里

<script type="text/javascript">

  $(function () {

    var oTime = $("#timebox");

    var ts = oTime.text().split(":", 3);

    var tnums = [parseInt(ts[0]), parseInt(ts[1]), parseInt(ts[2])];

    setInterval(function () {

      tnums = getNextTimeNumber(tnums[0], tnums[1], tnums[2]);

      showNewTime(tnums[0], tnums[1], tnums[2]);

    }, 1000);

    function showNewTime(h, m, s) {

      var timeStr = ("0" + h.toString()).substr(-2) + ":"

              + ("0" + m.toString()).substr(-2) + ":"

              + ("0" + s.toString()).substr(-2);

      oTime.text(timeStr);

    }

    function getNextTimeNumber(h, m, s) {

      if (++s == 60) {

        s = 0;

      }

      if (s == 0) {

        if (++m == 60) {

          m = 0;

        }

      }

      if (m == 0) {

        if (++h == 24) {

          h = 0;

        }

      }

      return [h, m, s];

    }

  });

</script>

Kod ini sangat mudah dan saya tidak akan menerangkannya di sini (saya hanya memaparkan jam, minit dan saat di atas. Anda juga boleh menambah tarikh. Apabila h==0, anda boleh mendapatkan tarikh atau masa lengkap secara langsung daripada pelayan. , sebagai pembacaan pruf masa), jika anda tidak faham, anda boleh mengulas di bawah, saya akan membalas dalam masa, dan kemudian mengikuti idea ini untuk melaksanakan kira detik yang disegerakkan . Ia serupa dengan jualan kilat, menetapkan masa tamat, dan kemudian mengira selang antara masa semasa dan masa tamat, dan ia mesti memastikan bahawa masa undur yang dipaparkan pada komputer dan pelayar yang berbeza adalah sama adalah seperti berikut:

<!DOCTYPE html>

<html>

<head>

  <title>同步倒计时</title>

  <script type="text/javascript" src="jquery-1.4.4.min.js"></script>

</head>

<body>

  <span id="timebox">1天00时00分12秒</span> <!--假设:1天00时00分12秒是从服务器获取的倒计时数据-->

  <script type="text/javascript">

    $(function () {

      var tid = setInterval(function () {

        var oTimebox = $("#timebox");

        var syTime = oTimebox.text();

        var totalSec = getTotalSecond(syTime) - 1;

        if (totalSec >= 0) {

          oTimebox.text(getNewSyTime(totalSec));

        } else {

          clearInterval(tid);

        }

      }, 1000);

      //根据剩余时间字符串计算出总秒数

      function getTotalSecond(timestr) {

        var reg = /\d+/g;

        var timenums = new Array();

        while ((r = reg.exec(timestr)) != null) {

          timenums.push(parseInt(r));

        }

        var second = 0, i = 0;

        if (timenums.length == 4) {

          second += timenums[0] * 24 * 3600;

          i = 1;

        }

        second += timenums[i] * 3600 + timenums[++i] * 60 + timenums[++i];

        return second;

      }

      //根据剩余秒数生成时间格式

      function getNewSyTime(sec) {

        var s = sec % 60;

        sec = (sec - s) / 60; //min

        var m = sec % 60;

        sec = (sec - m) / 60; //hour

        var h = sec % 24;

        var d = (sec - h) / 24;//day

        var syTimeStr = "";

        if (d > 0) {

          syTimeStr += d.toString() + "天";

        }

        syTimeStr += ("0" + h.toString()).substr(-2) + "时"

              + ("0" + m.toString()).substr(-2) + "分"

              + ("0" + s.toString()).substr(-2) + "秒";

        return syTimeStr;

      }

    });

  </script>

</body>

</html>

Untuk memastikan ketepatan kira detik, saya mula-mula mengira selang masa kira detik ke dalam saat, kemudian menolak 1 saat dan kemudian menjana semula format masa Sudah tentu, anda juga boleh mengikuti contoh penyegerakan masa di atas untuk mengurangkan secara langsung masa. Terdapat banyak kaedah, saya mungkin bukan yang terbaik, semua orang dialu-alukan untuk berkomunikasi, terima kasih!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn