Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在客户端(JavaScript)和服务器(PHP)之间平衡时区_Javascript_Php_Mysql_Cakephp_Timeago - Fatal编程技术网

如何在客户端(JavaScript)和服务器(PHP)之间平衡时区

如何在客户端(JavaScript)和服务器(PHP)之间平衡时区,javascript,php,mysql,cakephp,timeago,Javascript,Php,Mysql,Cakephp,Timeago,我有一个普遍的问题,但我不能在这个时候做。我在一个项目上工作。我们的数据库基于欧洲/阿姆斯特丹时间。然而,客户端时区和日期每次都在变化。你知道我在说什么吗 我通过PHP()从数据库中获取日期。我只希望这些日期写上“2分钟前”。我们将日期保存在数据库中,如“2017-08-04 13:43:38”我可以将其用于其他问题或功能。 我用 我的问题 我现在正在通过接口更改任何记录。(2017-08-04 13:43:38)(伊斯坦布尔时区)系统将2017-08-04 12:43:38(阿姆斯特丹时区)保

我有一个普遍的问题,但我不能在这个时候做。我在一个项目上工作。我们的数据库基于欧洲/阿姆斯特丹时间。然而,客户端时区和日期每次都在变化。你知道我在说什么吗 我通过PHP()从数据库中获取日期。我只希望这些日期写上“2分钟前”。我们将日期保存在数据库中,如“2017-08-04 13:43:38”我可以将其用于其他问题或功能。 我用

我的问题

我现在正在通过接口更改任何记录。(2017-08-04 13:43:38)(伊斯坦布尔时区)系统将2017-08-04 12:43:38(阿姆斯特丹时区)保存为修改日期。这就是为什么我的javascript总是显示大约一小时前应该是不到一分钟前我想将每个客户端时区更改为阿姆斯特丹时区

我的问题:

  • 我应该在哪里做?(客户端或服务器)
  • 我试着在客户端工作。如何通过javascript实现时区的快速均衡
  • 我应该在哪里做?(客户端或服务器)

    在服务器上,因为它有一个主机环境,您可以对其功能和时钟精度充满信心

    我试着在客户端工作。如何通过javascript实现时区的快速均衡

    如果要在客户端执行此操作,则需要提供一个字符串,该字符串将在客户端可靠地进行解析,并且包含时区。您可以使用ISO8601格式的字符串,并希望客户端正确解析它,或者手动解析字符串并确定(库可以提供帮助,但不是必需的)

    目前阿姆斯特丹是UTC+0200,因此您应该发送一个字符串,如“2017-08-04T13:43:38+0200”或“2017-08-04T11:43:38Z”,并希望客户端时钟准确

    如果您使用像矩.js这样的库,您可以使用它来解析字符串,并使用类似以下内容获得“友好”格式:

    //使用阿姆斯特丹的日期
    var d=力矩(“2017-08-05T13:43:38+0200”);
    log(d.format('d MMM YYYY[at]hh:mm A[local]”)是“+d.fromNow()+”);
    //等效UTC
    var d=力矩(“2017-08-05T11:43:38Z”);
    log(d.format('d MMM YYYY[at]hh:mm A[local]”)是“+d.fromNow()+”)
    
    如果您想获得准确的时间读数,可以使用Internet时间服务器来保证时间在您的平台上以毫秒级的粒度同步。一些公共的可以在这里找到。我会使用客户端查找时间,然后将其发送到服务器。我相信这些服务器将在ISO8601中使用

    你需要澄清你的问题。如果在“2017-08-04 13:43:38”这样的字符串上使用内置解析器,它可能(但不一定)会被视为本地的,因此表示主机时区设置变化的不同时刻。最好以UTC格式保存日期并手动解析(库可以提供帮助)。不惜一切代价避免使用内置的解析器,请参阅@RobG对不起。你说得对。我刚刚编辑了我的问题内容。