我正在使用日期从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));
}
}
答案 0 :(得分:1)
尝试使用此代码进行转换...
$date = "7/5/15";
$your_date = date("m/d/Y", strtotime($date));
echo $your_date;
它将回应07/05/2015
答案 1 :(得分:0)
$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的日期或类似情况?