比较服务器上的客户端时间

时间:2014-11-13 22:29:13

标签: node.js datetime timezone

如果我在服务器上有一个以下格式的字符串,可以在任何时区:

var timeString = 2014-05-24T14:00:00.000Z

将字符串表示的小时数与客户端作为GET请求(Node.js)的一部分传入的小时数进行比较的最佳方法是什么?

我需要帮助,因为服务器上的日期和从客户端收到的日期可能是夏令时,也可能是不同的时区。

我尝试将客户端时间作为自Unix纪元以来的毫秒数传递:

var clientTime = new Date(parseInt(req.query.localTime));
var serverTime = new Date(timeString);
if (serverTime.getUTCHours() == clientTime.getUTCHours()) {
    // the hours match
}

但它似乎没有成功。

2 个答案:

答案 0 :(得分:1)

你有没有检查过moment.js,它使得解析愚蠢的日期容易,并且有一个用于处理时区转换的伴随库(但通常不需要)。他们的文档中有一节解释了处理UTC与本地以及如何来回转换。

http://momentjs.com/docs/#/parsing/utc/

var moment = require('moment')
var timeString = '2014-11-14T00:06:34.000Z'
var epochTime = 1415923594000

var serverTime = moment(timeString).utc()
var clientTime = moment(epochTime).utc()


console.log(serverTime.hour());
console.log(clientTime.hour())

答案 1 :(得分:0)

追踪这一点,你会得到答案:

app.get('/', (req, res) => {
    res.send('<script>var r=new Date().valueOf() + ( ' + (new Date().getTimezoneOffset()) +
        ' - (new Date().getTimezoneOffset()) ) * -60000;' +
        'setInterval(()=>{document.body.innerHTML = (new Date(r+=1000)).toLocaleString("en",{weekday:"long", month:"long", day:"numeric", year:"numeric", hour:"numeric", minute:"numeric", second:"numeric", hour12:false})},1000);' +
        '</script>');
});