2016-03-08 15 views
0

在我網站上每個頁面上包含的navbar.php文件中,我想爲每個用戶設置時區。我發現了一個很好的js腳本,對我來說非常合適。我可以迴應這個變量,它能正確識別出「歐洲/布魯塞爾」是我的時區。現在我希望能夠將此時區變量設置爲PHP中的時區。這是我目前在我的navbar.php文件,但它不工作的代碼片段..傳遞javascript變量來設置PHP中的時區

<script type="text/javascript" src="domain/js/jstz.js"></script> 

<script> 
    $.ajax({ 
    var tz = jstz.determine(); 
    var tzname = tz.name(); 
    'url': 'navbar.php', 
    'type': 'POST', 
    'data': 'timezone=' + tzname 
    });  
</script> 

<?php 

$usertimezone = $_POST['timezone']; 
date_default_timezone_set($usertimezone); 

?> 

任何人誰可以看看有什麼不妥之處,幫助我嗎?謝謝!

+2

你意識到PHP運行在服務器上(它加載整個初始頁面的腳本) ,JS在客戶端上運行?這段php代碼在js代碼有機會運行之前就已經消失/被破壞了,所以你正在訪問一個未定義的$ _POST參數,並將你的時區設置爲'null'。 –

+0

也許這個答案會幫助你http://stackoverflow.com/questions/4746249/get-user-timezone :) –

+0

感謝您的評論@MarcB。我對這一切都很陌生,所以我仍然在學習。你知道另一種方式我可以做到這一點嗎?我只需要使用JS變量在PHP中設置時區。 –

回答

0

問題是時區是在頁面加載後設置的。主頁面腳本始終使用默認的php時區設置。
您應該將時區值存儲到一個會話變量:

navbar.php:

<?php 
session_start(); 
$usertimezone = $_POST['timezone']; 
$_SESSION['timezone'] = $usertimezone; 
?> 

main.php

<?php 
session_start(); 
if (isset($_SESSION['timezone'])) { 
    date_default_timezone_set($_SESSION['timezone']); 
} 
?> 
+0

我這樣做了,但還是一樣的。當我回顯我的date_default_timezone_get()時,它仍然顯示America/New York,而時區變量應該通過歐洲/布魯塞爾 –

+0

在第一次加載主頁面時,時區未更新,因爲會話變量尚未設置。但在下次加載時應該沒問題。確保會話在發送任何輸出之前被初始化。 –

+0

我試過多次重新加載.. –