将时间间隔存储到数据库中的方法

时间:2017-08-24 22:17:06

标签: javascript php html mysql

我正在构建一个需要存储时间间隔的Web应用程序。

示例:

  • 1小时
  • 1小时30分钟
  • 2小时
  • 2小时30分钟

我将在以下三种方式中使用间隔:

  1. 时间间隔由用户选择并存储在数据库中。
  2. 时间间隔在界面中显示为纯文本('1小时')。
  3. 时间间隔在函数内使用为毫秒。
  4. 我想了解一些将这个时间间隔与数据库存储在一起并在上述功能中使用的方法。

    目前,我将数据库中存储的间隔作为int(以毫秒为单位)。用户将从下拉菜单中进行选择。因此,如果他们选择“1小时”,那么该选择的值将是1小时(以毫秒为单位),即3600000,然后我可以在函数中使用它。是时候在界面中显示“1小时”时会出现一个小问题。

    我假设的另一种方法是将数据库中的间隔存储为字符串,然后使用函数来剥离值。例如:[1]小时[30]分钟。

    顺便说一句,我正在使用PHP和JavaScript。 PHP严格来说是服务器端和JavaScript客户端。

2 个答案:

答案 0 :(得分:0)

这应该完全由PHP处理 - 包括将时间插入数据库,以及格式化的输出。

我建议让选项values直接对应于各自的秒数(60秒到一分钟,3600秒到一小时):

<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]');

这将确保所有用户看到同一时间,无论他们身在何处。

希望这有帮助! :)

答案 1 :(得分:0)

如果我正确理解了您的问题,您应该可以使用html标记来执行此操作,方法是使用选择下拉元素并设置&#39;值&#39;每个选项元素的属性。示例:<select><option value="3600000">1 hour</option></select>(其中3600000是请求中发送的值,&#39; 1小时&#39;是向用户显示的内容)。

这是一个完整的测试用例:

<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

但是,我会质疑,在这种情况下你是否真的需要毫秒精度 - 从长远来看,这可能是一种过度杀伤和浪费存储和计算......从表面看,它看起来像是在几分钟内存储诀窍。

希望这对你有所帮助。