我有一个mysql表,它依赖于相当于条目日期的unix纪元时间戳来对网站的各个部分进行排序和过滤。我正在尝试实现一个日期选择器,它将以 mm/dd/yyyy 格式将日期输入表单字段。我一直在努力将该日期转换为 unix 纪元格式,以在行字段中添加该条目。我所做的所有尝试都生成了当天的纪元时间戳。有谁知道如何采用该日期格式并转换为等效的纪元时间戳?
提前致谢。
附加信息:
我一直在尝试mktime,得到的只是今天的纪元。抱歉,我应该早点添加一些代码以更好地解释:
表单id是“date” 数据库字段是“epoch”
这是我在发布日期时尝试的(未成功):
$epochhold = ($_POST['date']);
$epoch = mktime(0,0,0,$epochhold);
我从之前的帖子中了解到,这仍然会以 mm/dd/yyyy 的形式提交值,而不是 mktime 预期的 mm、dd、yyyy,但是该帖子没有提供如何执行此操作的解决方案。我尝试使用 str_replace 将“/”更改为“,”,这产生了相同的结果 - 无论输入的日期如何,都会获得今天的纪元日期。
这是代码示例 - 这又不起作用,但我添加它是为了帮助说明我所尝试的内容
$epochhold = ($_POST['date']);
$epochold2 = str_replace('/', ', ', $epochhold)
$epoch = mktime(0,0,0,$epochhold2);
也感谢您之前的回复,我不想让快速回复被忽视!
如果您知道它将始终采用该格式,strtotime 会将其直接转换为 unix 时间戳。
strtotime($_POST['app_date']);
您应该查看 mktime() 函数。将其与正则表达式或 strtotime() 结合起来,就可以了。
if ( ! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date']) ) {
// complain about invalid input
}
list($m, $d, $y) = explode('/', $_POST['date']);
$timestamp = mktime(0, 0, 0, $m, $d, $y);
您需要将 dd、mm、yyyy 作为单独的变量发送到 mktime。它将 $epochold2 中的值作为一个字符串,该字符串对于 mktime 无效。
您最好的选择是使用我之前所说的 strtotime,或者使用 mktime 遵循 Ant P 的建议。
strtotime() 将解析几乎任何日期格式并返回 Unix 时间戳。 您所要做的就是将您的日期/时间字符串传递给它:
$unix_time = strtotime($_POST['date']);
if($unix_time < 0) {
//error case
}
else {
//value OK!
}
正如您在上面所看到的,您甚至可以使用它来帮助验证输入 - 如果用户输入像 02/31/2008 这样的日期,它将返回 -1。