在php变量中存储javascript值
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
<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');
?>