在PHP中将m / d / yy转换为mm / dd / yyyy

时间:2015-07-14 19:20:23

标签: php

我正在使用日期从excel中提取列,并且我必须验证行中是否有日期,以日期为mm / dd / yyyy(07/05/2015)格式正常工作。它通过了日期验证功能,我能够获取该日期并将其存储在mysql date formate列中。但当我读取日期格式为m / d / yy(7/5/15)的excel文件时会出现问题我不确定它在什么时候出现故障,但当我查看数据库的日期时转换为奇怪的日期,并从日期验证功能中跳过大多数日期失败。我想要做的是在获得日期验证功能之前将我从excel中取出的字符串从m / d / yy转换为mm / dd / yyyy。谁能告诉我怎么能实现这个目标?

这是我验证其日期的功能。

public function is_date( $str ) /// function to check if its date
    { 
    $stamp = strtotime( $str ); 
    if (!is_numeric($stamp)) 
        return FALSE; 
    $month = date( 'm', $stamp ); 
    $day   = date( 'd', $stamp ); 
    $year  = date( 'Y', $stamp ); 
    if (checkdate($month, $day, $year)) 
        return TRUE; 
    return FALSE; 
    }

这是获取日期并发送到数据库的部分

 foreach(array_slice($sheetData, $dateRow-1) as $item) 
            { 
                $value = trim($item["{$revCol}"], "$");
                $value = str_replace(",", "", $value);
                $value = str_replace("?", "", $value);
                //check if its date or garbage data
                if ($this->is_date( $item["{$dateCol}"]) /* && $this->isCurrency($temp) */)
                {   
                    $key = $item["{$dateCol}"];
                    $key = date('Y-m-d', strtotime($key));
                    $sold = $item["{$soldCol}"];
                    $params = array('key' => $key);
                    $oldVal->execute($params);
                    $results = $oldVal->fetch(); // fetch old value before replacing with new   
                    $old_rev = $results['rev'];
                    $old_sold = $results['sold'];
                    $diff_rev = $value - $old_rev;
                    $diff_rev = number_format($diff_rev, 2, '.', '');
                    $diff_sold = $sold - $old_sold;
                    //$insertDiff->execute(array($key, $diff_rev, $diff_sold));     
                    $newVal->execute(array($key, $value, $diff_rev, $sold, $diff_sold));
                }       
            }

4 个答案:

答案 0 :(得分:1)

尝试使用此代码进行转换...

$date = "7/5/15";
$your_date = date("m/d/Y", strtotime($date));
echo $your_date;

它将回应07/05/2015

Here you have the example online

答案 1 :(得分:0)

这是你想要的吗? strtotime不符合这种格式

$str = '7/5/15';
echo date("m/d/Y", strtotime($str)); // 07/05/2015

答案 2 :(得分:0)

您可以将Excel中的列格式化为带前导零的日期。这似乎是最快的解决方案。

答案 3 :(得分:0)

strtotime应该做的工作。

尝试用' - '

替换'/'
$stamp = strtotime( str_replace('/', '-' ,$str ) );

如果没有,问题会一直发生在格式为m / d / yy的情况下,或者只是在某些情况下(例如,大于12的日期或类似情况?