2017-08-24 83 views
1

我正在構建一個需要存儲時間間隔的Web應用程序。將時間間隔存入數據庫的方法

實例:

  • 1小時
  • 1小時和30分鐘
  • 2小時
  • 2小時和30分鐘

我要去使用內的間隔有以下三種方式:

  1. 時間間隔由用戶選擇並存儲在數據庫中。
  2. 時間間隔在界面中顯示爲純文本('1小時')。
  3. 時間間隔在一個函數中用作毫秒。

我想知道一些方法來存儲這個時間間隔的數據庫,並在上面的功能使用。

目前我有作爲一個int(毫秒)存儲在數據庫中的間隔。用戶將從下拉菜單中進行選擇。因此,如果他們選擇「1小時」,那麼選擇的值將是1小時,即以毫秒爲單位,即3600000,那麼我可以在一個函數中使用它。當在界面中顯示「1小時」時出現輕微問題。

我假設的另一種方法是將數據庫中的時間間隔作爲字符串存儲,然後使用函數去除這些值。例如:[1]小時[30]分鐘。

我正在使用PHP和JavaScript的方式。 PHP嚴格來說是服務器端和JavaScript客戶端。

+1

使用[ISO 8601持續時間](https://en.wikipedia.org/wiki/ISO_8601#Durations)如何使用PHP的[DateInterval](http://php.net/manual/en/class)。 dateinterval.php);或通過[momentjs](https://momentjs.com/)與[時間間隔](https://github.com/luisfarzati/moment-interval)擴展 –

+0

雖然您可能需要在JavaScript中使用它作爲毫秒,你需要毫秒精度?我會把它作爲分鐘存儲。 – Scuzzy

回答

0

這是應該完全由PHP處理的東西 - 無論是將時間插入數據庫還是格式化輸出。

我建議具有的選擇已經values直接對應於它們各自的秒(60秒到一分鐘,3600秒的1小時):

<option value="3600">One hour</option> 
<option value="5400">One hour and thirty minutes</option> 

我將隨後時間存儲爲在秒數據庫:

$time = 3600; 
"INSERT INTO `table` VALUES ($time)"; 

這樣,你會從數據庫中檢索它(在這種情況下使用$time),與對其進行格式化sprintf()

$hours = floor($time/3600); 
$minutes = ($time/60) % 60; 
$seconds = $time % 60; 
$format = '%d hour(s), %d minute(s) and %d second(s)'; 
echo sprintf($format, $hours, $minutes, $seconds); 
// 1 hour(s), 30 minute(s) and 0 second(s) 

隨意適應所需的輸出。

請注意,您可能還需要設置一個默認的時區(根據您的具體應用程序),這是可以做到的:

date_default_timezone_set('[ZONE]'); 

這將確保所有用戶都看到同一時間,無論他們在世界的哪個地方。

希望這會有所幫助! :)

0

如果我正確理解您的問題,您應該可以通過使用選擇下拉元素併爲每個選項元素設置「值」屬性來使用html標記執行此操作。例如:<select><option value="3600000">1 hour</option></select>(其中3600000是在請求中發送的值,'1小時'是顯示給用戶的值)。

下面是一個完整的測試用例:

<form method="POST" target="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>"> 
    <select name="interval"> 
     <option value="3600000"<?php echo isset($_POST['interval']) && (int)$_POST['interval'] === 3600000 ? 'selected':''; ?>>1 hour</value> 
     <option value="5400000"<?php echo isset($_POST['interval']) && (int)$_POST['interval'] === 5400000 ? 'selected':''; ?>>1 hour and 30 minutes</value> 
     <option value="7200000"<?php echo isset($_POST['interval']) && (int)$_POST['interval'] === 7200000 ? 'selected':''; ?>>2 hours</value> 
     <option value="9000000"<?php echo isset($_POST['interval']) && (int)$_POST['interval'] === 9000000 ? 'selected':''; ?>>2 hours and 30 minutes</value> 
    </select> 
    <input type="submit" name="form_submit" value="submit"/> 
</form> 

<?php 
/* TEST CASE: */ 
if(isset($_POST['form_submit'])){ 
    if(isset($_POST['interval'])){ 
     echo $_POST['interval'].' milliseconds.'; 
    }else{ 
     echo 'Interval not set'; 
    } 

    /* TODO: code to insert into DB */ 
} 
?> 

供您參考:

Select lists - MDN

我會質疑,但是,你是否真的不需要精確到毫秒這一病例本從長遠來看,這可能會過度浪費存儲和計算的浪費......從表面上看,似乎在幾分鐘內存儲就可以實現。

希望這可以幫助你一些。

+0

是的,你沒有解釋正確的問題。我正在尋找的答案在上面。 –

相關問題