使用 PHP 将 mm/dd/yyyy 格式转换为纪元

Posted

技术标签:

【中文标题】使用 PHP 将 mm/dd/yyyy 格式转换为纪元【英文标题】:mm/dd/yyyy format to epoch with PHP 【发布时间】:2010-09-26 11:08:16 【问题描述】:

我有一个 mysql 表,它依赖于相当于条目日期的 unix 纪元时间戳在网站的各个部分进行排序和过滤。我正在尝试实现一个日期选择器,它将日期以 mm/dd/yyyy 格式输入到表单字段中。我一直在努力将该日期转换为 unix 纪元格式以将该条目添加到行字段中。我所做的所有尝试都导致生成当天的纪元时间戳。有谁知道我如何采用该日期格式并将其转换为等效的纪元时间戳?

提前致谢。

其他信息:

我一直在尝试 mktime,我得到的只是今天的时代。抱歉,我应该早点添加一些代码来更好地解释:

表单id是“date”,数据库字段是“epoch”

这是我在发布 for 日期时正在尝试的(未成功):

$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 似乎在初始测试中工作得最好,并且可能是要走的路,因为这种格式在整个网站上都是一致的。但是所有的建议都对其他一些事情有所帮助,所以再次感谢大家!

【问题讨论】:

您必须将 $epochhold 解析为 3 个变量,然后将所有三个变量都传递给 mktime。您不能只传递一个参数并期望 php 将其分成三个!我建议使用 split() 函数。 【参考方案1】:

如果您知道它将始终采用该格式,strtotime 会将其直接转换为 unix 时间戳。

strtotime($_POST['app_date']);

HTH!

【讨论】:

另外,不要忘记验证输入:strtotime('15/05/2008') 是 FALSE,而不是 1210802400 strtotime 是 PHP 中伟大的日期均衡器【参考方案2】:

您应该查看mktime() 函数。将它与正则表达式或strtotime() 结合使用,您就会拥有它。

【讨论】:

【参考方案3】:
if ( ! preg_match('#\d2/\d2/\d4#', $_POST['date']) ) 
    // complain about invalid input


list($m, $d, $y) = explode('/', $_POST['date']);
$timestamp = mktime(0, 0, 0, $m, $d, $y);

【讨论】:

【参考方案4】:

您需要将 dd,mm,yyyy 作为单独的变量发送到 mktime。它将 $epochold2 中的值作为一个对 mktime 无效的字符串。

您最好的选择是使用我之前所说的 strtotime,或者使用 mktime 遵循 Ant P 的建议。

【讨论】:

【参考方案5】:

strtotime() 将解析几乎任何日期格式并返回 Unix 时间戳。您所要做的就是将您的日期/时间字符串传递给它:

$unix_time = strtotime($_POST['date']);
if($unix_time < 0) 
    //error case

else 
    //value OK!

正如您在上面看到的,您甚至可以使用它来帮助验证输入 - 如果用户输入像 2008 年 2 月 31 日这样的日期,它将返回 -1。

【讨论】:

以上是关于使用 PHP 将 mm/dd/yyyy 格式转换为纪元的主要内容,如果未能解决你的问题,请参考以下文章

将格式 MM/DD/YYYY 的日期转换为 MySQL 日期 [重复]

将 JSON 日期转换为 MM/DD/YYYY 格式?

Pandas 将日期字符串从格式 mm/d/yyyy 和 mm/dd/yyyy 转换为 dd.mm.yyyy

将 mm/dd/yyyy 转换为 yyyymmdd (VB.NET)

如何将日期转换为格式`mm/dd/yyyy`

将 dd/mm/yyyy 格式的字符串转换为日期时间 [重复]