在php变量中存储javascript值

时间:2014-02-11 17:08:22

标签: javascript php kohana

的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变量作为字符串而不是变量。需要解决此问题的解决方案。

由于

1 个答案:

答案 0 :(得分:0)

你无法按照你想要的方式解决这个问题

源文件将由Web服务器加载,交给PHP,它将处理所有PHP代码(请注意,它不处理任何javascript代码)。然后将结果发送到客户端的浏览器,其中将执行任何JavaScript代码。

因此,当您运行代码时,echo正常工作,因为javascript代码直接输出到页面,然后由客户端Web浏览器解释,以便将时区写入页面。其余的PHP代码不起作用,因为$timezone只是HTML script标记和一些javascript的字符串表示。 PHP在服务器端没有处理或执行任何HTML或JavaScript。充满HTML和javascript的字符串不是DateTimeZone构造函数的有效输入,因此您的错误。

简单地说,两种类型的代码无法真正直接交互。您可以使用像AJAX这样的技术将信息从javascript代码发送回服务器,但这将是一个单独的请求,并且是一个非常不同于您在此处尝试的解决方案。