有的应用系统的用户或者客户分步在多个不同的时区,比如预约服务系统,客户分布在中国和欧洲,且后台CRM系统的操作员也是在对应的国家分布。则以下为可选方案和考虑的点
一、数据库保存的时间要统一时区,最好统一存储的时间为UTC时间。而读取显示的时间则是通过转换,显示为用户或者客户自己时区对应的时间。
二、如果客户可能是不同时区的,店面可能是不同的时区的,客户预约到店服务然后选择时间时,则选择的时间为店面时区的时间,需要有所提示。
这里就存在时间的存取和转换问题
if (!function_exists('timeRead2Write')) {
function timeRead2Write($time,$read_time_zone=false)
{
if(empty($time)){
return NULL;
}
$readTimeZone = $read_time_zone?$read_time_zone:CurrentTimeZone();
$writeTimeZone = config('app.time_zone');
return (new Carbon($time,$readTimeZone))->setTimezone($writeTimeZone)->toDateTimeString();
}
}
if (!function_exists('timeWrite2Display')) {
function timeWrite2Display($time,$format='d/m/Y H:i:s')
{
if(empty($time)||$time=='0000-00-00 00:00:00'){
return '';
}
$readTimeZone = CurrentTimeZone();
$writeTimeZone = config('app.time_zone');
return (new Carbon($time,$writeTimeZone))->setTimezone($readTimeZone)->format($format);
}
}