- A:先根据经纬度获取当地时区 (注):计算的区时=已知区时-(已知区时的时区-要计算区时的时区)(注:东时区为正,西时区为负)
- B:然后根据本地时间与当地时区推算出当地时间
- C:这是我百度找到怎么计算时区与时间
计算时区
function znoe_time($long)
{
$eastZnoe = '';
$westZnoe = '';
if ($long > 0) {
$znoe = ($long / 15);
$znoe_mod = abs($long % 15);
$znoe = intval($znoe);
if ($znoe_mod > 7.5) {
$znoe = $znoe + 1;
$eastZnoe = "GMT" . ($znoe);
} else {
$eastZnoe = "GMT" . ($znoe);
}
} else {
$znoe = ($long / 15);
$znoe_mod = abs($long % 15);
$znoe = intval($znoe);
if ($znoe_mod > 7.5) {
$znoe = ($znoe - 1);
$westZnoe = "GMT" . ($znoe);
} else {
$westZnoe = "GMT" . ($znoe);
}
}
$time_znoe = !empty($eastZnoe) ? $eastZnoe : $westZnoe;
return $time_znoe;
}
根据时区计算时间
function time_znoe($znoe, $summer_znoe)
{
date_default_timezone_set("Asia/Shanghai");
$beijingTiem = date("H:i");
$beijingTiem = str_replace(":", '.', $beijingTiem);
$znoeName = substr($znoe, 0, 4);
$znonNum = substr($znoe, 4);
if ($znoeName == 'west') {
$new_znoe = $beijingTiem - (8 - (-$znonNum));
if ($new_znoe < 0) {
$new_znoe = $new_znoe + 24;
$znoeTime = date("Y-m-d", strtotime("-1 day"));
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$znoeTime = date("Y-m-d");
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
} else if ($new_znoe >= 24) {
$new_znoe = $new_znoe - 24;
$znoeTime = date("Y-m-d", strtotime("+1 day"));
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
} else {
$znoeTime = date("Y-m-d");
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
}
$week = Date("w", strtotime($znoeTime));
return array('date' => $znoeTime, 'time' => $new_znoe, 'week' => $week);
}
if ($znoeName == 'east') {
$new_znoe = $beijingTiem - (8 - ($znonNum));
if ($new_znoe < 0) {
$new_znoe = $new_znoe + 24;
$znoeTime = date("Y-m-d", strtotime("-1 day"));
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$znoeTime = date("Y-m-d");
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
} else if ($new_znoe >= 24) {
$new_znoe = $new_znoe - 24;
$znoeTime = date("Y-m-d", strtotime("+1 day"));
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
} else {
$znoeTime = date("Y-m-d");
if (strtotime($znoeTime) >= strtotime(start_summer_znoe()) || strtotime($znoeTime) <= strtotime(end_summer_znoe())) {
if ($summer_znoe) {
$new_znoe++;
}
}
if ($new_znoe > 24) {
$hous = explode('.', $new_znoe);
$new_znoe = "00." . $hous[1];
}
}
$week = Date("w", strtotime($znoeTime));
return array('date' => $znoeTime, 'time' => $new_znoe, 'week' => $week);
}
}