ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสอบถามเรื่อง jQuery new Date ค่าที่ได้ที่ Local กับ Server ไม่เท่ากัน
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถามเรื่อง jQuery new Date ค่าที่ได้ที่ Local กับ Server ไม่เท่ากัน  (อ่าน 1703 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ChilTunDer
ก๊วนเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 317



ดูรายละเอียด
« เมื่อ: 09 สิงหาคม 2021, 22:04:07 »

เรามี string date 2021-08-09 11:12:10 เราใช้ new Date("2021-08-09 11:12:10") เพื่อแปลงเป็น object เนื่องจากเราต้องเอา Date ที่ได้ไปลบกับ date อีกค่านึง ทีนี้ค่า Date ที่แปลงได้คือ
Local: 1623152365215
Server: 18231526489465

ค่าข้างต้นเราสมมติขึ้นมานะ เราจำค่าจริงๆไม่ได้ แต่ Local จะได้ 13 หลักส่วน Server จะได้ 14 หลัก
ไม่แน่ใจว่าเกิดจากอะไร และจะแก้ปัญหานี้ได้อย่างไรค่ั
บันทึกการเข้า
fremznginx
ก๊วนเสียว
*

พลังน้ำใจ: 7
ออฟไลน์ ออฟไลน์

กระทู้: 219



ดูรายละเอียด
« ตอบ #1 เมื่อ: 23 สิงหาคม 2021, 17:11:50 »

เวลา server ตรงรึเปล่าครับ ปกติ unix time จะเป็นตัวเลขตัวเดียวกันหมด แล้วค่อยไปแปลงในแต่ละ timezone เอง
บันทึกการเข้า

รับทำเว็บไซต์ทุกรูปแบบ
รับ Tune Hosting ให้รองรับคนเข้าเยอะ ๆ
vii
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 132
ออฟไลน์ ออฟไลน์

กระทู้: 944



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 23 สิงหาคม 2021, 17:36:22 »

timestamp มันไม่ถูกต้องหรือเปล่าครับ

1623152365215 แปลงเป็นวันที่ได้ 53405-08-27 00:00:15
18231526489465 แปลงได้ 579704-01-29 08:44:25
ลองเอาค่าจริงๆมาดูจะดีกว่าจะได้รู้ว่าของจริงๆมันเป็นยังไง

อันนี้ตัวอย่างโค้ดที่ผมเอาไว้ตรวจเวลาระหว่างเครื่องที่ใช้ (JS) กับ server (PHP).

โค๊ด:
<?php
header
("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
header('Expires: 0'); // Proxies.


$timestamp time();
$phpdatetime date('Y-m-d H:i:s'$timestamp);


$headers = [];
$requestHeaders getallheaders();
if (
is_array($requestHeaders)) {
    foreach (
$requestHeaders as $key => $value) {
        
$headers[strtolower(trim($key))] = trim($value);
    }
    unset(
$key$value);
}
unset(
$requestHeaders);


if (
    isset(
$headers['accept']) && 
    (
        
stripos($headers['accept'], 'html') === false &&
        
stripos($headers['accept'], '*/*') === false
    
)
) {
    
header('Content-Type: application/json');

    
$output = [];
    
$output['datetime'] = $phpdatetime;
    
$output['timestamp'] = $timestamp;
    echo 
json_encode($output);
    unset(
$output);
    exit();
}
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Date/time now</title>
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            table {
                border: 1px solid #ccc;
                border-collapse: collapse;
            }
            table td,
            table th {
                border: 1px solid #ccc;
                padding: 5px;
                text-align: left;
            }

            .not-matched-datetime {
                background-color: rgba(255, 0, 0, .3);
            }
        </style>
    </head>
    <body>
        <h1>Date/time</h1>
        <table>
            <thead>
                <tr>
                    <th>Server date/time</th>
                    <th>Your date/time</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><span id="phpDateTime"><?php echo $phpdatetime?></span></td>
                    <td><span id="jsDateTime"></span></td>
                </tr>
                <tr>
                    <td><span id="phpTimestamp"><?php echo $timestamp?></span></td>
                    <td><span id="jsTimestamp"></span></td>
                </tr>
            </tbody>
        </table>

        <script>
            function addZero(number) {
                number = String(number);
                return number.padStart(2, '0');
            }

            function displayJSDatetime() {
                let Datetime = new Date();
                let dateString = Datetime.getFullYear()   '-'   addZero(parseInt(Datetime.getMonth())   1)   '-'   addZero(Datetime.getDate());
                dateString  = ' ';
                dateString  = addZero(Datetime.getHours())   ':'   addZero(Datetime.getMinutes())   ':'   addZero(Datetime.getSeconds());
                document.querySelector('#jsDateTime').innerHTML = dateString;
                document.querySelector('#jsTimestamp').innerHTML = Datetime.getTime();
            }

            document.addEventListener('DOMContentLoaded', (event) => {
                // display date/time of this device on load.
                displayJSDatetime();
                // then set interval to update them.
                let intervalId = setInterval(() => {
                    // display JS date/time on this device.
                    displayJSDatetime();

                    // ajax get server date/time.
                    fetch('<?php echo $_SERVER['REQUEST_URI']; ?>', {
                        headers: {
                            'Accept': 'application/json',
                            'Content-Type': 'application/x-www-form-urlencoded'
                        }
                    })
                    .then((response) => {
                        return response.json();
                    })
                    .then((response) => {
                        if (response.datetime) {
                            let phpDatetime = document.querySelector('#phpDateTime');
                            let jsDatetime = document.querySelector('#jsDateTime');
                            let phpTimestamp = document.querySelector('#phpTimestamp');
                            phpDatetime.innerHTML = response.datetime;
                            phpTimestamp.innerHTML = response.timestamp;

                            if (phpDatetime.innerHTML !== jsDatetime.innerHTML) {
                                jsDatetime.classList.add('not-matched-datetime');
                            } else {
                                jsDatetime.classList.remove('not-matched-datetime');
                            }
                        }
                    });
                }, 1000);
            });
        </script>
    </body>
</html>

จากโค้ดที่ผมใช้ JS, PHP จะได้หลักไม่เท่ากันแต่เวลาไม่ต่างกันครับ

ตัวอย่าง PHP 1629715239
JS 1629715239369
« แก้ไขครั้งสุดท้าย: 23 สิงหาคม 2021, 17:41:09 โดย vii » บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์