現在、このコードと 2 つの問題があります。
Javascript でユーザーのタイムゾーンを取得し、ajax を介して timezone.php に投稿します。これにより、ユーザーの時間で Cookie が設定されます。Cookie が設定されていない場合 (最初の訪問時など)、Cookie の値を表示するには、ページを更新する必要があります。現時点ではJavaScriptでこれを行っていますが、別の方法が必要です。また、Cookie がない場合はページが更新されるため、Cookie が無効になっているユーザーは更新ループが発生します。
これらの問題を解決する方法について何か提案はありますか?
ありがとう、マーカス
index.php:
<!DOCTYPE html>
<html>
<head>
<style>
.night {
background: #000;
color: #fff;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<?php
if(isset($_COOKIE["time"])) {
$time = $_COOKIE["time"];
if($time < 5.5 || $time > 19) {
$night = true;
}
} else {
echo("
<script>
var timezone = new Date().getTimezoneOffset()/60;
$(document).ready(function() {
$.post('timezone.php',{timezone: timezone}, function(data){location.reload(true)});
});
</script>
");
}
?>
</head>
<body class="<?php echo $night ? "night" : "day"; ?>">
<?php if($night) {
echo "It's nighttime! ($time)";
} else {
echo "It's daytime! ($time)";
} ?>
</body>
</html>
timezone.php:
<?php
$timezone = $_POST["timezone"];
if(isset($timezone)) {
date_default_timezone_set('Etc/GMT'.($timezone <= 0 ? '' : '+').$timezone);
$time = date("G") + (date("i")/60);
setcookie("time", $time);
}
?>