的javascript:
<script src="<?= URL::site('/public/js/jstz-1.0.4.min.js'); ?>" type="text/javascript"></script>
<script>
$(document).ready(function() {
var tz = jstz.determine(); // Determines the time zone of the browser client
});
</script>
PHP:
<?php
$timezone = '<script>
var tz = jstz.determine();
document.write(tz.name());
</script>';
?>
<?php
echo $timezone;
$tz = new DateTimeZone($timezone);//error producing line
$message_date = new DateTime($message_date);
$message_date->setTimeZone($tz);
$messagedate = $message_date->format('Y-m-d H:i:s');
?>
以上是获取时区的javascript。我通过脚本获取时区并将其分配给php变量。如果我回显php变量(echo $ timezone)我得到了正确的时区。但是如果我通过了时区转换代码中的相同变量(请参阅error producing line
),我收到此错误“Exception [ 0 ]: DateTimeZone::__construct(): Unknown or bad timezone (<script> var tz = jstz.determine(); document.write(tz.name()); </script>)
”。
实际上,它将整个$timezone
变量作为字符串而不是变量。需要解决此问题的解决方案。
由于
答案 0 :(得分:0)
你无法按照你想要的方式解决这个问题。
源文件将由Web服务器加载,交给PHP,它将处理所有PHP代码(请注意,它不处理任何javascript代码)。然后将结果发送到客户端的浏览器,其中将执行任何JavaScript代码。
因此,当您运行代码时,echo
正常工作,因为javascript代码直接输出到页面,然后由客户端Web浏览器解释,以便将时区写入页面。其余的PHP代码不起作用,因为$timezone
只是HTML script
标记和一些javascript的字符串表示。 PHP在服务器端没有处理或执行任何HTML或JavaScript。充满HTML和javascript的字符串不是DateTimeZone
构造函数的有效输入,因此您的错误。
简单地说,两种类型的代码无法真正直接交互。您可以使用像AJAX这样的技术将信息从javascript代码发送回服务器,但这将是一个单独的请求,并且是一个非常不同于您在此处尝试的解决方案。