1

这是我的情况。我通过 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 是在数据库中搜索日期范围的参数。所以我们可以不管它。

4

7 回答 7

6

您需要选择格式化的时间

$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')"; 
于 2013-08-01T17:47:20.100 回答
1
SELECT DATE_FORMAT(datefield, '%Y%m%d')

如果您想直接在数据库中执行此操作。

于 2013-08-01T17:47:27.063 回答
0

您可以str_replace()像对引号一样使用,但将其修改为破折号,用空字符串替换它们。

$value = str_replace( '-' , '' , $value );

不过,这会带来一些危险。如果您有其他使用破折号的数据类型怎么办?他们会被破坏的。另一种选择是在删除破折号之前使用explode()checkdate()确保它是 a 。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);
}
于 2013-08-01T17:41:13.150 回答
0
$newDate = str_replace('-', '', $oldDate)

那是你要找的吗?

此外 php 提供了一些很棒的日期格式化功能: http: //php.net/manual/en/function.date.php

于 2013-08-01T17:41:34.723 回答
0
$date="2013-08-01";

$converted_date=date("Ymd", strtotime($date));
于 2013-08-01T17:41:59.367 回答
0

我倾向于更喜欢 OOP 方法。这样,如果您需要更改格式,您可以轻松修改它。

$date = new DateTime($date_from_mysql);    
echo $date->format('Ymd'); // Or adjust the format how you like

当然,ext/mysql无论如何,您都不应该将已弃用的扩展用于新项目。

于 2013-08-01T17:48:26.703 回答
0

这个问题可以通过利用 MySQL 处理 Date 字段中的值的方式来轻松解决。只需添加 0 和破折号将被删除

select now();
//gives 2019-12-03 08:44:10

select now()+0;
//gives 20191203084504

您可以将此整数作为字符串处理并获取所需的任何部分。

于 2019-12-03T08:47:17.383 回答