如何管理时区为不同国家的不同用户的php web应用程序


How to manage timezone for different users of different countries for a php web application?

我正在开发web应用程序。该应用程序有来自不同国家的不同用户。

我已经使用UTC时间戳来管理它们的注册。

但是当我检查账户的到期日期时出现了问题。

例如-

想登记的有效期为15天,用户从印度的注册日期是2014年6月11日/亚洲/加尔各答时区,在数据库表我已经注册日期在Unix时间戳格式存储(服务器设置为UTC时区),16日我想他的账户到期,当我执行查询康普艾今天日期(日期时间戳,日期转换为时间戳使用PHP的strtotime()函数),有一天我发现有差异。如何处理这类情况?这不仅是注册问题,还有其他一些条件。另外,如果我想使用cron作业发送注册到期的电子邮件,它将如何工作?

您需要执行几个步骤。

  • 各时区国家数据库表
  • 在注册或表单提交时获取IP地址
  • 根据IP检查详细信息并获取国家和时区
  • 保存国家和时区记录信息

通过这种方式,您可以按照创建者的时区维护记录。

对于基于时区的过期记录,您可以根据其时区进行检查。

假设我在巴基斯坦,时区是5+。所以到期步骤也应该遵循我的时区。

/**
 * @function getusertimezonedifference return timezone difference with UTC
 * @param integer $timezonedifference       optional
 * @return string time
 * @Comment Get User TimeZone Difference
 */
public function getusertimezonedifference($timezone = "Asia/Kolkata", $changetoUTC=false, $flg_array=false)
{
    #$timezone = "Asia/Kolkata";+5.30
    #$timezone = "America/Anchorage";-9
    #$timezone = "America/Los_Angeles";-8
    #$timezone = "America/Dawson_Creek";-8
    #$timezone = "America/Chicago";-6
    #$timezone = "America/New_York";-5
    #$timezone = "America/Halifax";-4
    #$timezone = "America/St_Johns";#3.30
    $dayLightFlag = false;
    $system_timezone = date_default_timezone_get();
    $local_timezone = "UTC";
    date_default_timezone_set($local_timezone);
    $local = date("Y-m-d H:i:s");
    date_default_timezone_set("GMT");
    $gmt = date("Y-m-d H:i:s");
    date_default_timezone_set($timezone);
    $required = date("Y-m-d H:i:s");
    date_default_timezone_set($system_timezone);
    $diff1 = (strtotime($gmt) - strtotime($local));
    $diff2 = (strtotime($required) - strtotime($gmt));
    if($changetoUTC) {$diff2 =  (-1*$diff2);}
    // extract hours
    $hours = floor($diff2 / (60 * 60));
    // extract minutes
    $divisor_for_minutes = $diff2 % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);
    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);
    //create string HH:MM:SS
    $ret = $hours.":".(($minutes>9)?$minutes:"0$minutes").":".(($seconds>9)?$seconds:"0$seconds");
    if($flg_array){$ret = array($hours, ((abs($minutes)>9)?$minutes:"0$minutes"), ($seconds>9)?$seconds:"0$seconds");}
    return ($ret);
}