mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 12:18:46 +00:00
Re-use timezone offset parsing
This commit is contained in:
parent
eeda22d0ba
commit
e0a7944faa
@ -164,8 +164,7 @@ namespace pocketmine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function detect_system_timezone()
|
function detect_system_timezone(){
|
||||||
{
|
|
||||||
switch(Utils::getOS()){
|
switch(Utils::getOS()){
|
||||||
case 'win':
|
case 'win':
|
||||||
$regex = '/(?:Time Zone:\s*\()(UTC)(\+*\-*\d*\d*\:*\d*\d*)(?:\))/';
|
$regex = '/(?:Time Zone:\s*\()(UTC)(\+*\-*\d*\d*\:*\d*\d*)(?:\))/';
|
||||||
@ -181,37 +180,9 @@ namespace pocketmine {
|
|||||||
|
|
||||||
if($offset == ""){
|
if($offset == ""){
|
||||||
return "UTC";
|
return "UTC";
|
||||||
}else{
|
|
||||||
//Make signed offsets unsigned for date_parse
|
|
||||||
if(strpos($offset, '-') !== false){
|
|
||||||
$negative_offset = true;
|
|
||||||
$offset = str_replace('-', '', $offset);
|
|
||||||
}else if(strpos($offset, '+') !== false){
|
|
||||||
$negative_offset = false;
|
|
||||||
$offset = str_replace('+', '', $offset);
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parsed = date_parse($offset);
|
|
||||||
$offset = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
|
|
||||||
|
|
||||||
//After date_parse is done, put the sign back
|
|
||||||
if($negative_offset == true){
|
|
||||||
$offset = -abs($offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
//And then, look the offset up.
|
|
||||||
//timezone_name_from_abbr is not used because it returns false on some(most) offsets because it's mapping function is weird.
|
|
||||||
//That's been a bug in PHP since 2008!
|
|
||||||
foreach(timezone_abbreviations_list() as $zones){
|
|
||||||
foreach($zones as $timezone){
|
|
||||||
if($timezone['offset'] == $offset){
|
|
||||||
return $timezone['timezone_id'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return parse_offset($offset);
|
||||||
break;
|
break;
|
||||||
case 'linux':
|
case 'linux':
|
||||||
// Ubuntu / Debian.
|
// Ubuntu / Debian.
|
||||||
@ -236,44 +207,14 @@ namespace pocketmine {
|
|||||||
|
|
||||||
if($offset == "+00:00"){
|
if($offset == "+00:00"){
|
||||||
return "UTC";
|
return "UTC";
|
||||||
}else{
|
|
||||||
//Make signed offsets unsigned for date_parse
|
|
||||||
if(strpos($offset, '-') !== false){
|
|
||||||
$negative_offset = true;
|
|
||||||
$offset = str_replace('-', '', $offset);
|
|
||||||
}else if(strpos($offset, '+') !== false){
|
|
||||||
$negative_offset = false;
|
|
||||||
$offset = str_replace('+', '', $offset);
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parsed = date_parse($offset);
|
|
||||||
$offset = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
|
|
||||||
|
|
||||||
//After date_parse is done, put the sign back
|
|
||||||
if($negative_offset == true){
|
|
||||||
$offset = -abs($offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
//And then, look the offset up.
|
|
||||||
//timezone_name_from_abbr is not used because it returns false on some(most) offsets because it's mapping function is weird.
|
|
||||||
//That's been a bug in PHP since 2008!
|
|
||||||
foreach(timezone_abbreviations_list() as $zones){
|
|
||||||
foreach($zones as $timezone){
|
|
||||||
if($timezone['offset'] == $offset){
|
|
||||||
return $timezone['timezone_id'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return parse_offset($offset);
|
||||||
break;
|
break;
|
||||||
case 'mac':
|
case 'mac':
|
||||||
if(is_link('/etc/localtime')){
|
if(is_link('/etc/localtime')){
|
||||||
$filename = readlink('/etc/localtime');
|
$filename = readlink('/etc/localtime');
|
||||||
if (strpos($filename, '/usr/share/zoneinfo/') === 0){
|
if(strpos($filename, '/usr/share/zoneinfo/') === 0){
|
||||||
$timezone = substr($filename, 20);
|
$timezone = substr($filename, 20);
|
||||||
return $timezone;
|
return $timezone;
|
||||||
}
|
}
|
||||||
@ -285,6 +226,44 @@ namespace pocketmine {
|
|||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $offset In the format of +09:00, +02:00, -04:00 etc.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function parse_offset($offset){
|
||||||
|
//Make signed offsets unsigned for date_parse
|
||||||
|
if(strpos($offset, '-') !== false){
|
||||||
|
$negative_offset = true;
|
||||||
|
$offset = str_replace('-', '', $offset);
|
||||||
|
}else{
|
||||||
|
if(strpos($offset, '+') !== false){
|
||||||
|
$negative_offset = false;
|
||||||
|
$offset = str_replace('+', '', $offset);
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$parsed = date_parse($offset);
|
||||||
|
$offset = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
|
||||||
|
|
||||||
|
//After date_parse is done, put the sign back
|
||||||
|
if($negative_offset == true){
|
||||||
|
$offset = -abs($offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
//And then, look the offset up.
|
||||||
|
//timezone_name_from_abbr is not used because it returns false on some(most) offsets because it's mapping function is weird.
|
||||||
|
//That's been a bug in PHP since 2008!
|
||||||
|
foreach(timezone_abbreviations_list() as $zones){
|
||||||
|
foreach($zones as $timezone){
|
||||||
|
if($timezone['offset'] == $offset){
|
||||||
|
return $timezone['timezone_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user