2013-11-03 48 views
0

我想使用PHP和JavaScript呼應當前的本地日期(而不是服務器日期)。本地日期與PHP和JavaScript

我的代碼如下:

<?php 

$year = '<script type="text/javascript"> 
    var date = new Date(); 
    var year = date.getFullYear(); 
    document.write(year); 
    </script>'; 

$month = '<script type="text/javascript"> 
    var date = new Date(); 
    var month = date.getMonth(); 
    var monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "november", "December"); 
    var curMonth = monthName[month]; 
    document.write(curMonth); 
    </script>'; 

$day='<script type="text/javascript"> 
    var date = new Date(); 
    var day = date.getDate(); 
    document.write(day); 
    </script>'; 

$curDateString = $day . " " . $month . " " . $year; 
$curDate = date('m/d/y', strtotime($curDateString)); 
echo $curDate; 

?> 

它總是返回01/01/70

我在做什麼錯?

+1

您在混合使用JavaScript和PHP。 PHP將在服務器進行解釋,JavaScript將在客戶端進行解釋,因此不可能以這種方式將JavaScript中的值提供給PHP。你想要客戶端或服務器的本地日期嗎?由於PHP將在服務器上運行,因此只能獲取服務器的日期,而JavaScript只能確定客戶端的日期。 –

+0

您不能混用客戶端和服務器端代碼。 – havana

+0

你有沒有檢查過你的變量'$ day,$ year,$ month',什麼都沒有。 –

回答

0

您的JavaScript代碼將在客戶端而非服務器端執行。這意味着JavaScript代碼不會在服務器端進行評估,因此字符串$curDateString將不具有您認爲它的值。

正常echo $curDateStringvar_dump($curDateString)將輸出3 november 2013 - 這是因爲默認Content-Typetext/html$curDateString變量內的代碼將在客戶端執行,輸出將爲3 november 2013

要了解什麼$curDateString的確不包含,你可以做到以下幾點:

header('Content-Type: text/plain'); 
var_dump($curDateString); 

這將輸出類似如下:

string(587) "<script type="text/javascript"> 
    var date = new Date(); 
    ... 
    </script> 

到PHP,這是隨機的亂碼。您然後在上面的字符串上使用strtotime(),但它失敗並將返回01/01/70作爲輸出。

爲了達到您想要的效果,您可以製作一個AJAX call,它可以從客戶端傳遞日期值。然後,您可以在PHP腳本中接收此輸入,並在服務器端對其進行處理並將相應的回送。

0

是使用了PHP only很簡單:

例如,如果你是從倫敦,你會怎麼做:

date_default_timezone_set('Europe/London');

之後,你會得到時間:

$date = date('m/d/Y h:i:s a');

echo $date