【问题标题】:new datetime - only one instance at a time?新的日期时间 - 一次只有一个实例?
【发布时间】:2017-03-14 04:52:55
【问题描述】:

如何在一页上显示 3 个不同的 datetime 对象?下面的代码只会返回服务器日期(第一项)并关闭所有其他日期。

此脚本的目的是显示用户所在位置的当前日期和时间,包括夏令时(即特定地点的实际时间,而不仅仅是 GMT + 他们应该在的任何时区)。

$server_datetime = new DateTime();  //located in America/New_York timezone - GMT-5
echo "Current Server DateTime: " . $server_datetime->format('Y-m-d H:i:s');

echo "<hr>";

$usersTimezone1 = 'Europe/London';  // GMT-0
$user_datetime1 = new DateTime(new DateTimeZone($usersTimezone1) );
echo "London User DateTime: " . $user_datetime1->format('Y-m-d H:i:s');

echo "<hr>";

$usersTimezone2 = 'Asia/Shanghai';  // GMT+8
$user_datetime2 = new DateTime(new DateTimeZone($usersTimezone2) );
echo "Shanghai User DateTime: " . $user_datetime2->format('Y-m-d H:i:s');

echo "<hr>";

【问题讨论】:

  • 开启错误报告
  • Message: DateTime::__construct() expects parameter 1 to be string, object given DateTimeZone 对象应该是第二个参数。

标签: php datetime


【解决方案1】:

消息:DateTime::__construct() 期望参数 1 是字符串, 给定对象

DateTimeZone 对象应该是第二个参数。

$server_datetime = new DateTime();  //located in America/New_York timezone - GMT-5
echo "Current Server DateTime: " . $server_datetime->format('Y-m-d H:i:s');

$usersTimezone1 = 'Europe/London';  // GMT-0
$user_datetime1 = new DateTime( 'now', new DateTimeZone($usersTimezone1) );
echo "London User DateTime: " . $user_datetime1->format('Y-m-d H:i:s');

$usersTimezone2 = 'Asia/Shanghai';  // GMT+8
$user_datetime2 = new DateTime( 'now', new DateTimeZone($usersTimezone2) );
echo "Shanghai User DateTime: " . $user_datetime2->format('Y-m-d H:i:s');

【讨论】:

  • 我的英雄...我知道这是小事 ;)
  • 但是按照Sougata Bose所说,开启错误报告;)
  • 已经这样做了,但是我的整个页面都死了,导致500错误页面,因此错误显示没有用。无论如何,现在已经解决了,谢谢你的手。
  • 很高兴它对您有所帮助,您能否接受我的帖子作为您问题的答案。
【解决方案2】:
   $server_datetime = new DateTime();  //located in America/New_York timezone - GMT-5
    echo "Current Server DateTime: " . $server_datetime->format('Y-m-d H:i:s');

    echo "<hr>";

    date_default_timezone_set('Europe/London');
    $user_datetime = new DateTime();
    echo "London User DateTime: " . $user_datetime->format('Y-m-d H:i:s');

    echo "<hr>";

    date_default_timezone_set('Asia/Shanghai'); // GMT+8
    $user_datetime2 = new DateTime();
    echo "Shanghai User DateTime: " . $user_datetime2->format('Y-m-d H:i:s');

    echo "<hr>";

输出是:

    Current Server DateTime: 2017-03-14 06:22:59

    London User DateTime: 2017-03-14 05:22:59

    Shanghai User DateTime: 2017-03-14 13:22:59

【讨论】:

  • 问题:如果我想将用户时间基于当前服务器时间怎么办?例如。服务器时间“2017-01-01 13:00:00”保存在我的数据库中,但现在我想在时区“亚洲/上海”中显示当时的等效时间,我该怎么做?这似乎不起作用:$user_datetime1 = new DateTime( $server_datetime, new DateTimeZone($usersTimezone1) );
【解决方案3】:

@Armitage2k 试试这个:

<?php
$server_datetime = new DateTime();
echo "Current Server DateTime: " . $server_datetime->format('Y-m-d H:i:s');
echo "<hr>";

$usersTimezone1 = 'Europe/London';  // GMT-0
$user_datetime1 = new DateTime();
$user_datetime1->setTimeZone(new DateTimeZone($usersTimezone1));
echo "London User DateTime: " . $user_datetime1->format('Y-m-d H:i:s');

echo "<hr>";


$usersTimezone2 = 'Asia/Shanghai';  // GMT+8
$user_datetime2 = new DateTime();
$user_datetime2->setTimeZone(new DateTimeZone($usersTimezone2));
echo "Shanghai User DateTime:" . $user_datetime2->format('Y-m-d H:i:s');

echo "<hr>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多