需要Javascript时区解决方案(考虑UTC时间戳的实际差异)

需要Javascript时区解决方案(考虑UTC时间戳的实际差异),javascript,mysql,datetime,Javascript,Mysql,Datetime,我有来自未知时区X的unix时间戳 TZ X中的当前时间戳(now())已知1275143019 如何处理javascript函数,使其能够以2010-05-29 15:32:35格式在用户当前TZ中生成日期时间 更新 我不是unix时间戳专家,如果unix时间戳在不同的TZ中总是相同的 然后我必须稍微修改一下这个问题,以便知道TZ X中的当前日期时间(如2010-05-29 22:32:28),而另一个日期时间也是这种格式,如何根据now()和之间的差异将它们转换为用户的TZ 更新 MySQL

我有来自未知时区X的unix时间戳

TZ X中的当前时间戳(
now()
)已知
1275143019

如何处理javascript函数,使其能够以
2010-05-29 15:32:35
格式在用户当前TZ中生成日期时间

更新

我不是unix时间戳专家,如果unix时间戳在不同的TZ中总是相同的

然后我必须稍微修改一下这个问题,以便知道TZ X中的当前日期时间(如
2010-05-29 22:32:28
),而另一个日期时间也是这种格式,如何根据
now()和
之间的差异将它们转换为用户的TZ

更新

MySQL有点奇怪:

在服务器上:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2010-05-29 18:34:30 | 
+---------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1275143674 | 
+------------------+
1 row in set (0.00 sec)
关于本地:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2010-05-29 22:41:30 |
+---------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1275144091 |
+------------------+
1 row in set (0.00 sec)

为什么
now()
2010-05-29 22:41:30-2010-05-29 18:34:30=6小时
)和
UNIX_TIMESTAMP()
1275144091-1275143674=417秒
)之间的区别不一样?

实例化日期对象时,可以传递UNIX风格的“从纪元开始的毫秒”时间值:

var date = new Date(milliseconds);
该时间值被解释为UTC。当您在该日期对象上调用toString,或使用小时/分钟/秒的getter时,您将在客户端获得本地时区中的值

正如@vava在评论中指出的,从Unix/Linux返回的毫秒或秒当前时间值始终是UTC,因此服务器可以将该值放入页面中,当它在客户端上执行时,将发生正确的事情

编辑-如果需要将服务器上的本地时间转换为客户端上的本地时间,则确实需要以UTC为单位获取服务器时间,或者至少知道UTC偏移量。从年/月/日小时/分钟/秒的值中,您可以使用“setUTCFoo”函数设置Javascript日期(其中“Foo”表示“FullYear”、“month”、“date”、“hour”、“minute”、“Seconds”、“millizes”)


现在选择()和;命令是因为时区不同。 选择UNIX_时间戳();在任何两台机器上应始终相同

那么为什么417秒是不同的呢?这很简单:

417秒~=7分钟

22:41:30-18:34:30=7分钟


同步时钟和unix时间戳将是相同的。

unix时间戳始终在UTCY中您问了500个问题,但只接受了其中一半的答案?!?不要着急,这个问题还远没有解决。如果数据库服务器是一台独立的机器,那么可能是时钟没有正确同步。您的意思是
select UNIX\u TIMESTAMP()
服务器
本地
上应该是相同的,即使它们在不同的TZ?22:41:30-18:34:30=7小时,而不是分钟。此外,我尝试了几种不同的机器,它们的
UNIX_TIMESTAMP()
结果都不同,所以我不能依赖UTC时间戳。如果你不能依赖时间戳,那么这些都毫无意义。把你的钟修好。没有API告诉你你的时钟有多错;这毫无意义。但正如你在我的帖子中看到的,UTC时间戳实际上是不同的,你想让我忽略它吗?如果你服务器上的时钟错误,你必须修复它们。否则就无法知道实际UTC时间是多少。这似乎很明显。我网络上的所有时钟都返回相同的时间,彼此相差不到几毫秒,因为我的机器(像任何管理良好的机器一样)使用NTP来保持同步。我需要考虑服务器/客户端时间的UTC差异,即使它可能是由时钟或其他原因引起的。你是认真的吗?例如,‘22:41:30-18:34:30’不是“7小时”的区别。相差4小时7分钟。如果您的机器只是在不同的时区,那么时差将是偶数小时,而不是额外的分钟。好的,我同意这可能是一个时钟问题,但如果我可以在javascript中获得当前时间戳,则可以修复。与javascript中的UNIX_时间戳相比,当前值是
var timestamp=new Date()。getTime()
-这就像一个“Unix”时间戳乘以1000。