2017-10-18 62 views
0

我有一個頁面,我用作由樹莓派驅動的數字標誌。該頁面顯示日期和時間以及顯示當前天氣。如何僅調用date()一次,然後以不同格式顯示多次

我打電話date()函數三個不同的時間。一種是確定天氣圖標是白天還是晚上,另一種是以較大數字顯示時間,最後是顯示當前日期。

有沒有一種方法可以將date()存儲在一個變量中,然後以三種不同的方式使用它?

<?php 
$page = $_SERVER['PHP_SELF']; 
$sec = "10"; 
//header("Refresh: $sec; url=$page"); 
$bg = array(); // create an empty array 
$directory = "images/"; //the directory all the images are in 
$images = glob($directory . "*.jpg"); //grab all of the images out of the directory with .jpg extention 

foreach($images as $image) 
{ 
    $bg[] = $image;//populate the empty array with an array of all images in the directory folder 
} 

    $i = rand(0, count($bg)-1); // generate random number size of the array 
    $selectedBg = "$bg[$i]"; // set variable equal to which random filename was chosen 

    $json_string="http://api.openweathermap.org/data/2.5/weather?lat=49.1985&lon=-113.302&appid=b29961db19171a5d4876c08caea9af0d&units=metric"; 
    $jsondata = file_get_contents($json_string); 
    $obj = json_decode($jsondata, true); 
    $now = date('U'); //get current time 
    $temp = round($obj['main']['temp']); 

    if($now > $obj['sys']['sunrise'] and $now < $obj['sys']['sunset']){ 
    $suffix = '-d'; 
    }else{ 
    $suffix = '-n'; 
    } 

?> 

<div id="todaysdatetime"> 
    <div id="todaystime"> 
    <span><?php echo(date("g:i A"));?></span> 
    </div> 
    <div id="todaysdate"> 
    <span><?php echo(date("l\, F j<\s\up>S</\s\up>"));echo ' &nbsp;&nbsp; <i class="owf owf-', $obj['weather'][0]['id'].$suffix, '"></i> ', $temp, '&deg;C'; ?></span> 
    </div> 

</div> 
+4

在您實際執行HTTP請求的同時,三個date()調用不會顯着減慢您的代碼。不要猜測爲什麼你的代碼很慢,要進行基準測試。 – CodeCaster

+1

基準與否,幾個日期通話可以減緩任何明顯數量的想法簡直是荒謬可笑... – CBroe

+0

@CBroe很高興知道。我只是猜測在這一點上,爲什麼它可能會比在我的電腦上更慢。 – ShemSeger

回答

1

你不能真正做到這一點,因爲你傳遞給date()什麼是你想要在顯示它的格式。date()是你爲了格式化日期調用該函數。

因此,您不能存儲結果並再次使用它,因爲結果是難以翻譯回內部日期表示的人類可讀字符串。你正在做的事情已經是最簡單的(也是唯一的)做法,並且對你的表現影響也很小。

1

有兩種方法。

  1. 獲取帶有time()的時間戳將它存儲在變量和調用日期('YOUR_FORMAT',$ timestamp);
  2. 使用類\DateTime和使用datetime對象的方法format()

這兩個選項有這個優勢DATETIME將始終是相同的,因爲代碼的執行速度慢的也不會改變。

相關問題