这是我的情况。 我通过php文件将记录发送到数据库。然后我用now()设置了一个日期字段。它以此格式添加日期:2013-08-01
然后我将数据库导出到csv。一切正常。但是,当我将它导出到csv时,我需要删除破折号。所以我需要阅读:20130801
有办法做到这一点吗?这是我导出到csv代码:
$from = $_REQUEST['from'];
$to = $_REQUEST['to'];
$filename = "APGE_ELEC_" . $to;
header('Content-Disposition: attachment; filename="'.$filename.'".csv"');
$hostname = ""; //SET SERVER/HOSTNAME
$dbusername = ""; //SET DATABASE USERNAME
$dbname = ""; //SET DATABASE NAME
$dbpassword = ""; //SET DATABASE USERNAME
$dbhandle = mysql_connect($hostname, $dbusername, $dbpassword)
or die("Unable to connect to MySQL");
$selected = mysql_select_db($dbname,$dbhandle)
or die("Could not select Data Base");
//$query = "SELECT * FROM v88374 WHERE ((date >= '$from') AND (date <= '$to'))";
$query = "SELECT * FROM v88374 WHERE date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND date <= DATE_FORMAT('" . $to . "', '%Y%m%d')";
//$query = "SELECT * FROM v88374 WHERE date >= DATE_FORMAT($from) AND date <= DATE_FORMAT($to)";
$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) ."|" . "\t";
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = $value . '|' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );
if ( $data == "" )
{
$data = "\n(0) Records Found!\n";
}
print "$header\n$data";
exit();
$ to和$ from是用于在数据库中搜索日期范围的参数。所以我们可以单独留下。
答案 0 :(得分:5)
您需要选择格式化时间
$query = "SELECT *, DATE_FORMAT(date,"%Y%m%d") FROM v88374 WHERE date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND date <= DATE_FORMAT('" . $to . "', '%Y%m%d')";
答案 1 :(得分:1)
SELECT DATE_FORMAT(datefield, '%Y%m%d')
如果您想直接在数据库中执行此操作。
答案 2 :(得分:0)
您可以像使用引号一样使用str_replace()
,但可以将其修改为短划线,将其替换为空字符串。
$value = str_replace( '-' , '' , $value );
但是,这会带来一些危险。如果您有其他使用短划线的数据类型怎么办?他们已经腐败了。另一种方法是在删除短划线之前使用explode()
和checkdate()
确保它是date
。例如:
$dt = explode("-", $value); // Yields array([0] => 2013, [1] => 08, [2] => 01)
// checkdate(int month, int day, int year)
if (checkdate($dt[1], $dt[2], $dt[0])) {
// It's a date.
$value = str_replace('-','',$value);
}
答案 3 :(得分:0)
$newDate = str_replace('-', '', $oldDate)
这就是你要找的东西吗?
另外php提供了一些很棒的日期格式化功能:http://php.net/manual/en/function.date.php
答案 4 :(得分:0)
$date="2013-08-01";
$converted_date=date("Ymd", strtotime($date));
答案 5 :(得分:0)
我倾向于选择更多的OOP方法。这样,如果您需要更改格式,可以轻松修改它。
$date = new DateTime($date_from_mysql);
echo $date->format('Ymd'); // Or adjust the format how you like
当然,您不应该为新项目使用已弃用的ext/mysql
扩展程序。
答案 6 :(得分:0)
可以利用MySQL处理Date字段中的值的方式轻松解决此问题。只需添加0,破折号将被删除
select now();
//gives 2019-12-03 08:44:10
select now()+0;
//gives 20191203084504
您可以将此整数作为字符串处理,并获取其中需要的任何部分。