【问题标题】:How to get the Date value from HTML5 input type="date"如何从 HTML5 输入 type="date" 获取日期值
【发布时间】:2018-01-13 07:53:45
【问题描述】:

这是用户从表单中选择fromdatetodate 的用户界面。

<html>
<form name="frmSearch" method="post" action="searchdate2.php">


  <label> From date </label>

  <input type="date" name="fromdate" />

  <label> To date</label>

  <input type="date" name="todate" />

  <input type="submit" name="go" value="Search">


</form>

然后在searchdate2.php中,我试图显示与mysql匹配日期范围的结果

include('connect-db.php');

   $result = mysqli_query("SELECT * FROM treatmentdetail 
   WHERE nextdate BETWEEN '" . $_POST['fromdate'] . "' AND  '" . 
   $_POST['todate'] . "'");


 while($row = mysqli_fetch_array( $result ,MYSQL_ASSOC)) {

  echo "<tr>";
  echo '<td width="100px">' . $row['id'] . '</td>';
  echo '<td width="200px">' . $row['patientid'] . '</td>';
  echo '<td width="200px">' . $row['treatmentid'] . '</td>';

   }

  echo "</tr>";
  echo "</table>";
   ?>

我试图弄清楚如何使用 HTML5 输入 type="date" 获取日期值,

我可以用 PHP 或 JQuery 来做吗?

【问题讨论】:

  • “我可以用 PHP 或 JQuery 做吗?” 可以(嗯,PHP 和 JavaScript)。你需要决定你想要哪一个。

标签: php jquery html mysql date


【解决方案1】:

BETWEEN SQL 运算符适用于数值...您正在给它字符串。

我建议您使用 &gt;&lt; 运算符,它们适用于字符串:

$result = mysqli_query("SELECT * FROM treatmentdetail WHERE nextdate > '" . $_POST['fromdate'] . "' AND nextdate <  '" . $_POST['todate'] . "'");



编辑

从您的上一条评论中(«如果我的数据库中有 2017-7-1...»),我想我发现了您的实际问题。
HTML &lt;input type="date"&gt; 返回前导零。

并且数据库中月份和日期的前导零缺失
您是人类,不需要前导零即可理解“2017-7-1”与“2017-07-01”是同一日期。

但机器不同意这一点。
对它来说,那些不是日期......那些是字符串。第一个值更大,因为 7 在字符位置 5 处大于 0

“abcde”大于“aaabc”
“12345”大于“11123”。

看这里:

date_db = "2017-7-1";

date_post="2017-07-01";

greater = (date_db > date_post);
equal = (date_db == date_post);
smaller = (date_db < date_post);

console.log(greater);
console.log(equal);
console.log(smaller);

我会修复我的数据库数据。
您只需要清理一次即可避免一些复杂的脚本,您需要遍历一些格式错误的数据。

【讨论】:

  • 我试过使用 $result = mysql_query("SELECT * FROM treatmentdetail WHERE nextdate BETWEEN '$from' AND '$to'");以及 $result = mysql_query("SELECT * FROM treatmentdetail WHERE nextdate >= '$from' AND nextdate
  • 例如,如果我在数据库中有 2017-7-1,当我在日期选择器中选择该日期时,结果不会显示,只有当我选择 2017 年之前的一天-6-30,然后它会工作
【解决方案2】:

我可以用 PHP 或 JQuery 来做吗?

在 JavaScript 中,在浏览器上,您可以从 valueAsDate property 获取它:

// Without jQuery:
console.log(document.querySelector("input[name=fromdate]).valueAsDate);
// With jQuery:
console.log($("input[name=fromdate])[0].prop("valueAsDate"));

要从 PHP 访问它,您需要提交表单并从 $_GET$_POST(视情况而定)获取字符串值并解析它。

【讨论】:

  • 从代码 sn-p 中可以看出,我尝试使用 $_POST 获取日期值但失败,请问如何解析它?
  • @T.J.Crowder 是否应该是 console.log( $("input[name='fromdate']").eq(0).prop("valueAsDate") ); 从输入中获取日期对象(我认为这不是 OP 需要的......)? ;)
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2017-11-22
  • 2017-06-09
  • 2011-02-15
  • 2021-01-06
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多