![](/img/trans.png)
[英]How to manage date and time mismatch for different countries users in php and mysql
[英]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作业发送注册到期的电子邮件,它将如何工作?
/**
* @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);
}
您需要执行几个步骤。
这样,您可以沿创建者的时区维护记录。
至于根据时区过期的记录,则可以根据其时区进行检查。
假设我在巴基斯坦,时区是5+。 因此,到期步骤也应遵循我的时区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.