PHP日期-字符串到时间戳

PHP日期-字符串到时间戳,php,date,Php,Date,我正在尝试解析日期字符串,而不必操作字符串并期望使用给定的格式 我希望我的用户能够输入2011年1月2日或1-2-11,并且仍然以2011-01-02 12:00:00保存在数据库中 目前,我已经准备好了: $post_date = date("Y-m-d H:i:s", strtotime(stripslashes($_POST['post_date']))); 但是strotime似乎返回0,因为datetime最终为1969-12-31 17:00:00 我需要改变什么 更新 从php

我正在尝试解析日期字符串,而不必操作字符串并期望使用给定的格式

我希望我的用户能够输入
2011年1月2日
1-2-11
,并且仍然以
2011-01-02 12:00:00
保存在数据库中

目前,我已经准备好了:

$post_date = date("Y-m-d H:i:s", strtotime(stripslashes($_POST['post_date'])));
但是strotime似乎返回0,因为datetime最终为
1969-12-31 17:00:00

我需要改变什么


更新

从php.net:

(菲律宾比索4,菲律宾比索5)

strotime—将任何英文文本datetime描述解析为Unix时间戳

…我想不是


我没有尝试创建strotime(数组:

if(isset($_POST['post_date'])){
                foreach($_POST['post_date'] as $id => $post_date){
                    print $post_date.'<br />';
                    if(strlen(trim($post_date)) && $post_date !== 'Date posted'){
                        $update_data[$id]['post_date'] = date("Y-m-d H:i:s", strtotime(stripslashes($post_date)));
                    }
                }
            }
if(设置($\u POST['POST\u date'])){
foreach($\u POST['POST\u date']作为$id=>$POST\u date){
打印$post_日期。“
”; if(strlen(修剪($post_-date))&&$post_-date!=='dateposted'){ $update_data[$id]['post_date']=日期(“Y-m-d H:i:s”,strotime(stripslashes($post_date)); } } }

让它与:

if(isset($_POST['post_date'])){
                foreach($_POST['post_date'] as $id => $post_date){
                    print $post_date.'<br />';
                    if(strlen(trim($post_date)) && $post_date !== 'Date posted'){
                        $post_date = str_replace(',', '', $post_date);
                        $post_date = str_replace('-', '/', $post_date);
                        $update_data[$id]['post_date'] = date("Y-m-d H:i:s", strtotime(stripslashes($post_date)));
                    }
                }
            }
if(设置($\u POST['POST\u date'])){
foreach($\u POST['POST\u date']作为$id=>$POST\u date){
打印$post_日期。“
”; if(strlen(修剪($post_-date))&&$post_-date!=='dateposted'){ $post_date=str_replace(“,”,“$post_date”); $post_date=str_replace(“-”、“/”、$post_date); $update_data[$id]['post_date']=日期(“Y-m-d H:i:s”,strotime(stripslashes($post_date)); } } }

多亏了多个贡献者。我删除了逗号,并用正斜杠替换了连字符。

您确实需要关注您的输入,但这里有一个想法

foreach($_POST['input'] as $userDate) {
    // strtotime() will assume m/d/y or y-m-d depending on if '-' of '/' is used.
    $userDate = str_replace('-', '/', $userDate);
    $post_date = date("Y-m-d H:i:s", strtotime(stripslashes($userDate)));
}

从评论中,OP表示:


$\u POST['POST\u date']实际上是一个数组(更新多个记录), 但示例值为“2012年12月31日”

不能在
strotime
参数中随时间传递逗号,这样做将始终返回
1970-01-01 00:00:00
。必须删除用户生成的逗号

$post_date = date("Y-m-d H:i:s", strtotime(stripslashes("1 January 1927 17:59")));
echo $post_date; //1927-01-01 17:59:00
在PHP5.3.3+中(可能还有更早的版本)

(注意逗号在那里)将为您提供
2011-01-02

但是,当您将小时和分钟添加到该日期短语的末尾时,strotime确实返回0

date('Y-m-d', strtotime('January 2, 2011 14:30'))
不幸的是给你的是
1970-01-01 00:00:00
注意:

考虑删除逗号:

$date = str_replace(',', '', $date);
此外,strotime将把'1-2-11'转换为2001-02-11(2001年2月11日),因此,如果数字符合模式,您可能需要重新排列数字,例如:

 $date = preg_replace('#^([\d]{1,2})-([\d]{1,2})-([\d]{2,4})$#', '$3-$1-$2', $date);

$\u POST['POST\u date']当前是什么?$\u POST['POST\u date']实际上是一个数组(更新多个记录),但一个示例值是“2012年12月31日”,与genesis一致。我刚刚用PHP5.3测试了它,它工作得很好。但要记住的一点是,strotime通常将#-#-#-#作为年-月日期。如果您想要不同的行为,可能需要首先更彻底地解析它。您不能使用
strotime()
在数组上。你确定要向它传递字符串,而不是数组吗?你能在该行上方执行
echo$\u POST['POST\u date']
并告诉我们它的输出吗?考虑到你的示例输入,它对我很有效。逗号可能会混淆strotime(),但我认为它不会总是破坏它。我没有否决投票,但我只是测试了strotime()在2011年1月2日的
中,它运行得很好。可能是不同的版本、ini、系统等@Dano-See,在这两种情况下,它们都破坏了
strotime
。我认为这个答案完全符合这个问题,不值得否决。是的,它可以归结为不同的版本。我建议他删除逗号并运行它.@Mob逗号只有在用逗号将时间添加到日期时才会断开。有逗号但没有小时和秒的日期会给出预期的结果。@ghbarratt好的。谢谢。我不知道。++关于输入问题。这是这里的主要问题。不幸的是,strotime不会假设d-m-y,但实际上会假设y-m-d。
 $date = preg_replace('#^([\d]{1,2})-([\d]{1,2})-([\d]{2,4})$#', '$3-$1-$2', $date);