2017-08-24 23 views
1

私は時間間隔の記憶を必要とするWebアプリケーションを構築しています。データベースに時間間隔を保存する方法

例:

  • 1時間
  • 1時間と30分
  • 2時間
  • 2時間30分

私は内の間隔を使用するつもりです次の3つの方法があります。

  1. 時間間隔はユーザーによって選択され、データベースに保存されます。
  2. 時間間隔は、インターフェイス内にプレーンテキストとして表示されます( '1時間')。
  3. 時間間隔は、関数内でミリ秒単位で使用されます。

この時間間隔をデータベースに保存し、上記の機能で使用する方法を知りたいと思います。

現在、インターバルはデータベース内にint(ミリ秒単位)として格納されています。ユーザーはドロップダウンメニューから選択します。したがって、「1時間」を選択した場合、その選択の値は1時間3600000ミリ秒になります。次に、その値を関数内で使用できます。インターフェイス内に「1時間」を表示するときにわずかな問題が発生します。

別の方法として、データベース内の間隔を文字列として格納し、関数を使用して値を削除する方法があります。例:[1]時間[30]分

私は途中でPHPとJavaScriptを使用しています。 PHPは、厳密にはサーバーサイドとJavaScriptクライアントサイドです。

+1

PHPの[DateInterval](http://php.net/manual/en/class)で使用されている[ISO 8601 Durations](https://en.wikipedia.org/wiki/ISO_8601#Durations)の使用についてはどうですか? dateinterval.php); [moment-interval](https://github.com/luisfarzati/moment-interval)の内線番号 –

+0

で[momentjs](https://momentjs.com/)にアクセスしてください。あなたはjavascriptでミリ秒、ミリ秒の精度が必要ですか?私は分としてそれを保存するだろう。 – Scuzzy

答えて

0

これはPHPによって完全に処理されるべきものです - データベースへの時間の挿入とフォーマットされた出力の両方です。

私は選択が直接(時間に分60秒、3600秒)には、それぞれの秒に対応valuesを持っていた推薦:

<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時間'はユーザーに表示される値です)。私はあなたが本当にこの大文字でこれをミリ秒の精度を必要とするかどうか、しかし、疑問でしょう

Select lists - MDN

:あなたの参考のため

<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 */ 
} 
?> 

:ここ

は、完全なテストケースであります長期的には過剰な貯蔵と計算の無駄かもしれません...表面からは、数分で保存するような仕掛けがあります。

これはあなたに役立ちます。

+0

ええ、あなたは正しい質問を解釈しませんでした。私が探していた答えは上記です。 –

関連する問題