Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php变量中存储javascript值_Javascript_Php_Kohana - Fatal编程技术网

在php变量中存储javascript值

在php变量中存储javascript值,javascript,php,kohana,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 brows

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>

上面是获取时区的javascript。我通过脚本获取时区,并将其分配给一个php变量。如果我回显php变量(echo$timezone),我将获得正确的时区。但是如果我在时区转换代码中传递相同的变量(请参见
错误生成行
),我将获得此错误“
异常”[0]:日期时区::_构造():未知或错误的时区(var tz=jstz.determine();document.write(tz.name());)

实际上,它将整个
$timezone
可变作为字符串而不是变量。需要解决这个问题


谢谢

你不能用你试图解决的方法来解决这个问题

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

因此,当您运行代码时,
echo
起作用,因为javascript代码直接输出到页面,然后由客户端web浏览器输入,将时区写入页面。其余PHP代码不起作用,因为
$timezone
只是HTML
脚本
标记和一些javascript。服务器端的PHP不会处理或执行任何HTML或javascript。包含HTML和javascript的字符串不是
DateTimeZone
构造函数的有效输入,因此出现错误


简单地说,这两种类型的代码无法直接交互。您可以使用AJAX等技术将javascript代码中的信息发送回服务器,但这将是一个单独的请求,与您在这里尝试的解决方案截然不同。

您喜欢使用AJAX吗?@SumanBogati如何使用AJAX轻松方法是将变量写入一个隐藏的dom元素。
document.write
?真的……不要这样做@user2681579对不起,误解了。是否可以通过ajax调用php函数对页面加载进行ajax调用,以将这个时区保存在db中。关于ajax的介绍/教程超出了这个问题的范围(一般来说,可能是这个网站)。这是W3C关于AJAX如何工作以及如何开始使用该技术的一个很好的参考。是的,可以使用javascript获取时区并将其发送回服务器以放入数据库。这个问题可能也很有帮助:
<?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');
?>