php - 在我的 PHP 代码中,我应该在哪里使用函数来转换日期?

标签 php html mysql date

(由于约翰·康德(John Conde)不理解我的问题而错误地将其标记为已回答,因此我不得不编辑这篇文章。)

在我的 PHP 应用程序中,用户应该能够以 strtotime() 函数理解的任何格式输入日期。这是输入:

    <label>Release Date:</label>
    <input type="text" name="release_date"/>&nbsp;<span>Use any valid 
           date format</span>
    <br />

然后索引页从表单中提取它并将其存储在数据库中,如下所示......

$release_date = $_POST['release_date'];

并将其显示在列表页面上,如下所示:

<td><?php $date = date('n/j/Y', strtotime($product['releaseDate'])); 
                      echo $date; ?></td>

我知道如何将日期从一种格式转换为另一种格式。显示面没问题。但是,我在哪里以及如何获取用户输入(以 strtotime() 函数可以解释的任何日期格式输入)并将其转换为进入数据库的可读格式?现在,如果我输入任何非“xxxx-xx-xx”格式的日期,它会被读取为 0,并显示为 UNIX 0, 1/1/1970。

谢谢。

最佳答案

某些日期可以找到,并且您可以做到,但某些日期(例如从每月 1 号到第 12 号的任何日期)将是不明确的,因为您无法区分月份和日期。如果您允许两位数年份,那么 2001 年到 2012 年也会出现问题 - 并且 2001 年到 2031 年年份与月份会发生冲突。

在某些情况下,您可以要求用户进行澄清,但这会更加复杂。

不要忘记添加:

    $todate = stripslashes(trim($_POST['form-todate']));

消除任何潜在的 SQL 注入(inject)。

这里还有一个日期验证:

    function validateDate($date, $format = 'Y-m-d H:i:s') {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }

函数是从此 answer 复制的或php.net

您可以将输入字符串以各种格式传递给此函数,直到出现一个或多个匹配项(您可能不想要其中的时间,因此将其取出)。

如果有多种格式匹配 - 询问用户以确认是哪一种。

顺便说一下,如果你要对此进行网络化,我在(我认为)https://eonasdan.github.io/bootstrap-datetimepicker/ 中使用了一种很棒的 bootstrap js 技术。

它会在您的输入字段上创建一个迷你日历,因此用户无需输入任何内容 - 只需指向并单击即可。

关于php - 在我的 PHP 代码中,我应该在哪里使用函数来转换日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369125/

相关文章:

javascript - 返回对象进入一个变量

php - 查看上次访问目录 php 的日期

html - 使用 CSS 突出显示整行

javascript - 如何在CHROME中的选择框选项中显示图像?

php - 使用数组的数组填充表单选项列表

php - 我的数据库模型(很糟糕)让人头疼,如何改进它?

php - 在 For 循环中运行查询

jquery - css 或 jquery - 将鼠标悬停在一个 div 上,另一个 div 消失或不显示

php - 下拉列表中的 if 语句取决于数据库值和用户登录

mysql - 将连接限制为完整集而不是子集