【问题标题】:Convert facebook time zone into my local time zone as facebook does像 facebook 一样将 facebook 时区转换为我的本地时区
【发布时间】:2012-06-10 16:59:55
【问题描述】:

我正在使用 facebook api 并将 created_time 设置为 2012-06-06T16:20:43+0000

我已在大约发布此状态 21:57(IST)

我得到 2012-06-06T16:20:43+0000

任何帮助将不胜感激,以与我发布的时间相同以获得确切的更新。

【问题讨论】:

    标签: php javascript facebook facebook-graph-api timezone


    【解决方案1】:

    您可以使用此代码转换任何时区:

    $timestamp = strtotime("2012-06-06T16:20:43+0000");   //here you put your string with the tie
    
    $dtime = new DateTime();
    $dtime->setTimestamp($timestamp);
    $localtz = new DateTimeZone("Asia/Calcutta");         //choose the correct PHP timezone
    $dtime->setTimeZone($localtz);                        //we apply the timezone
    
    $stringtime = $dtime->format('Y-m-d\TH:i:sO');        //here you return the time in the same format as facebook
    $unixtime = $dtime->format('U');                      //here u get the unix timestamp format of the same string
    
    print $stringtime;
    

    【讨论】:

    • 卢卡您好,感谢您的宝贵反馈。但我尝试了上面的代码。它什么也不显示。你能检查一下吗?谢谢
    • 要了解 DateTimeZone 构造函数的参数,请单击 [php.net/manual/en/timezones.php ] 处的链接之一。
    【解决方案2】:

    我之前已经为此任务编写了一个函数,

    我已根据您的需要对其进行了更新,

    var fbDateFix = function(date){ 
    var local = new Date(date.replace(/-/g,'/').replace('T',' ').replace('+0000',''));
    local.setSeconds(local.getSeconds() + 19800);
    return local;
    }
    var padZero = function(t){
      if(t<10){
         return '0' + t;
      }
      return t;
    }
    var d = fbDateFix('2012-06-06T16:20:43+0000');
    console.log(d);
    var month = padZero(+d.getMonth()+1);
    var date = padZero(+d.getDate());
    var hour = padZero(+d.getHours());
    var min = padZero (+d.getMinutes());
    var sec = padZero (+d.getSeconds());
    console.log(d.getFullYear() + '-' + month + '-' + date + 'T' + hour + ':' + min + ':' + sec + '+0000')
    

    编辑:

    这在 php 中适用于我,

    date_default_timezone_set('Asia/Calcutta');
    $timestamp = strtotime('2012-06-06T16:20:43+0000');
    $local_datetime = date('c',$timestamp); 
    echo $local_datetime;
    

    【讨论】:

    • 您好 Jashwant,感谢您的宝贵回复。但它显示错误的年份和日期。我们还需要相同输出格式的结果。它当前显示:- 2012-06-07T06:51:32+0000 为 Mon Jan 08 2035 12:21:32 GMT+0530 (IST) 你能检查一下吗?谢谢
    • 您好 Jashwant,是否可以使用 php.ini 完成所有这些操作。因为我必须在 php 中操作这个时间才能在图中显示。谢谢
    • @SoftprodigyIndi​​a,我编辑了我的 js 代码并添加了 php 代码。在处理日期时间时我总是很困惑;)所以,请在你身边检查一下:)
    • 您好 Jashwant,我使用了您的 php 代码 date_default_timezone_set('Asia/Calcutta'); $timestamp = strtotime('2012-06-06T16:20:43+0000'); $local_datetime = date('c',$timestamp);回声 $local_datetime;我使用 date_default_timezone_get() 函数来获取用户的时区。它返回“UTC”。我认为代码不适用于UTC。是吗?我想使用 date_default_timezone_get() 函数来获取用户时区并相应地更改时间。如果我使用“Asia/Calcutta”,您的代码运行良好,但如果我使用 date_default_timezone_get(),即返回“UTC”。然后代码不起作用。谢谢
    • 无法通过 php 获取用户的时区。 PHP 驻留在服务器上,并且总是在服务器上给出时区。询问用户他/她的时区或使用 javascript。 new Date().getTimezoneOffset()/60 会给你时区。
    【解决方案3】:

    返回给您的日期似乎是 UTC 日期时间。您需要将其转换为您当地的时区 (IST)...

    请参阅以下 SO 问题以使用 php 转换日期时间: php convert datetime to UTC

    【讨论】:

      【解决方案4】:

      您可以使用 PHP 的 strtotimecreated_time 转换为 UNIX 时间戳。然后您可以添加或减去您的时区偏移量(IST 是 UTC+05:30)。

      【讨论】:

      • 你不加或减 Unix 时间戳,那太愚蠢了(对不起)。相反,您要做的是根据您的时区格式化 unix 时间戳。在您的 PHP 配置中设置默认时区,date() 将显示在该时区中——仅此而已。
      • 我知道如果你必须添加或减去更长的时间段(你必须考虑闰年和其他东西)会有所不同,但是 5 小时,为什么要减去 18000 秒错了吗?
      • Fe,因为有些国家/地区有夏令时,有些国家/地区没有,而那些在不同日期切换/从夏令时切换的人......这只是你 做,尤其是因为它 a) 完全没有必要,并且 b) 也错误。无论您身在何处,加/减 x 秒的时间戳代表一个完全不同的时间点。稍后您可能会想到将这个错误的时间戳(在您的应用程序中可能看起来不错)传递给其他人,然后他们尝试根据他们的时区正确格式化它,事情开始变得混乱......
      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2013-05-26
      • 2011-09-16
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多