在javascript中显示客户端时间而不是服务器时间

在javascript中显示客户端时间而不是服务器时间,javascript,datetime,Javascript,Datetime,我对javascriptDate()函数的奇怪问题很感兴趣,以下是详细信息 服务器端:Struts(ActionForm、Action类、jsp) 客户端:jQuery、javascript 现在,我需要在页面上设置一个服务器时间,并使用javascript进行操作。所以,我做了Calendar.getInstance().getTimeinMillis()并将其另存为ActionForm属性 现在,在客户端,我从styleId获得了long值(timeinMillis)。但是,为了操纵,当我这

我对javascript
Date()
函数的奇怪问题很感兴趣,以下是详细信息

服务器端:Struts(ActionForm、Action类、jsp)
客户端:jQuery、javascript

现在,我需要在页面上设置一个服务器时间,并使用javascript进行操作。所以,我做了
Calendar.getInstance().getTimeinMillis()并将其另存为ActionForm属性

现在,在客户端,我从styleId获得了long值(timeinMillis)。但是,为了操纵,当我这样做的时候

var curTime = parseInt($("#serverTime").val());
var serverTime = new Date(curTime);
现在,serverTime提供的是客户机日期,而不是服务器日期,尽管我们提供的是以毫秒为单位的服务器时间

奇怪的是,当我从服务器传递日期的字符串值而不是longtimeinmillis并将其作为参数传递时,它工作得很好


有什么想法吗?

如果您的服务器和客户端时间在不同的时区,并且您希望向用户显示这种差异,那么您也必须向客户端发送时区信息

Calendar.getInstance().getTimeinMillis()
返回自历元以来的毫秒数,但它没有说明时区。从1970/1/1UTC的午夜到现在只有几毫秒,在任何时刻,这个数字在任何系统上都是相同的(好吧,假设时间是同步的),不管系统的时区如何。这可能会给你一种印象,你得到的是客户机时间而不是服务器时间


之所以使用日期的字符串表示,是因为其中包含时区信息,以及Javascript在构造
date
对象时能够解析并将其考虑在内。

这是因为Javascript在客户端计算机上运行,所以在创建新日期()时在javascript中,它拾取客户端机器时间

回答第二个查询如果将服务器日期作为字符串传递,它将创建该日期的日期对象

使用下面的函数

    function calcTime(offset) {
        // create Date object for current location
        d = new Date();
       // convert to msec, add local time zone offsetand  get UTC time in msec
        utc = d.getTime() + (d.getTimezoneOffset() * 60000);

        // create new Date object with supplied offset
        nd = new Date(utc + (3600000*offset));

        // return time as a string
        return "The Server time is " + nd.toLocaleString();

    }

在这里,您需要使用UTC传递服务器时间的偏移量。在上述提示的帮助下,最终解决了该问题

从java端,使用日光节约选项从UTC获取偏移量

所以,在行动课上

Calendar c = Calendar.getInstance();
TimeZone z = c.getTimeZone();
int offset = z.getOffset(c.getTimeInMillis());
这给出了本地时区和UTC时区的偏移量,包括日间照明节能

在javascript上,我使用

var now = new Date(); 
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
var sd = new Date(now_utc.getTime() + offset);
alert("The Server time is " + sd.toLocaleString());
而且,这提供了正确的服务器时间和日光节约选项


非常感谢你的帮助,没有他们,就不可能解决这个问题。干杯

PHP中的一个简单解决方案:

  var phpDate = '<?php echo date('Y/m/d H:m:s');?>'
    , serverDate = new Date(phpDate)
    , month = serverDate.getMonth()+1 //getMonth() returns a 0-based number.
    , day = serverDate.getDate()
    , year = serverDate.getFullYear();

  console.log(year + '-' + month + '-' + day);
var phpDate=''
,serverDate=新日期(phpDate)
,month=serverDate.getMonth()+1//getMonth()返回一个基于0的数字。
,day=serverDate.getDate()
,year=serverDate.getFullYear();
console.log(年+'-'+月+'-'+日);

Hmm。。。。你的服务器和客户端时间相差多少?这是时区差异吗?@davida。是的,这是时区差异。假设服务器在伦敦运行,用户正在从我们访问,我们想要的是,坐在伦敦的用户将看到我们的服务器计时和本地计时。您好,您的回答很有帮助,但仍然没有得到确切的计时。但是,我解决了这个问题,请看我的答案版本。david,你是对的,但我想要一个解决方案,但你的答案帮助我实现了,请看我的答案版本。如果客户端和服务器无法同步(例如,某人的笔记本电脑上有5分钟的空闲时间),该怎么办?我会考虑发送服务器的时间戳和时区偏移,或者一些(标准化的)文本表示的日期-如果我必须实现这一点,我可能会坚持使用LATTE。你是非常正确的戴维,我同意你的想法是一样的,但是然后需要坚持一些东西,看一看,你应该更加注意阅读并理解响应上下文。答案是正确的,虽然它对你没有用处,但对其他人可能有用。