我从excel拉列与日期,并与代码,我必须验证如果行有日期在它的工作正常,当日期在mm/dd/yyyy(07/05/2015)格式。它通过日期验证函数,我能够抓取该日期并将其存储在mysql日期格式列中。但问题来了,当我阅读excel文件的日期格式m/d/yy(7/5/15)我不确定在什么时候它失败了,但当我看它的数据库的日期被转换为奇怪的日期,并跳过大部分日期从失败的日期验证功能。我想做的是转换字符串我从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));
}
}
试试下面的代码来转换它…
$date = "7/5/15";
$your_date = date("m/d/Y", strtotime($date));
echo $your_date;
回复07/05/2015
这里是在线示例
可以将Excel中的列格式设置为带前导零的日期。这似乎是最快的解决办法。
这是你想要的吗?Strtotime理解这样的格式
$str = '7/5/15';
echo date("m/d/Y", strtotime($str)); // 07/05/2015
strtotime应该做这项工作。
尝试用"-"代替"/"
$stamp = strtotime( str_replace('/', '-' ,$str ) );
如果不是,则问题总是以m/d/yy格式发生,或者只是在某些情况下(例如大于12的天数或类似的东西)