在只包含数字的日期字符串中添加斜杠


Add slashes to date string containing only numbers

我得到了这个变量:

$payments['date'] = 21062013

问题:

它是一个日期,所以我想给这个字符串加上斜杠。

How I'm try:

echo $paymentdate = substr($payments['date'],2)+/+substr($payments['date'],4)+/substr($payments['date'],8);

坏了,有人能帮帮忙吗?

我的完整代码:

$i = 0;
foreach($SQL->query('SELECT id, form, email, value, data, date, compensated from payments where compensated="N"') as $payments)
{
 $i++;
 $paymentdate = substr($payments['date'], 0, 2)."/".substr($payments['date'], 2, 2)."/".substr($payments['date'], 2, 8);
 echo '<tr bgcolor="' . (is_int($i / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . '">  
  <td>' . $payments['id'] . '</td>
  <td>' . $payments['form'] . '</td>
  <td>' . $payments['email'] . '</td>
  <td>' . $payments['value'] . '</td>
  <td>' . $paymentdate .'</td>
  <td>' . $payments['data'] . '</td>
  <td>' . $payments['compensated'] . '</td>
  <td>a</td>
 </tr>';
}

应该可以了;

echo $paymentdate = substr($payments['date'], 0, 2)."/".substr($payments['date'], 2, 2)."/".substr($payments['date'], 4, 4);

使用strtotime()函数更改显示方式

<?php echo date("m/d/y", strtotime("20130621")); ?>

请:

  • 阅读substr()的文档。

substr($payments['date'], 0, 2) . '/' . substr($payments['date'], 2, 2) . '/' . substr($payments['date'], 4, 4);

function convertDate($date, $format = 1)
{
    $newDate = "";
   //Convert a string to an array
   $num = str_split($date);
   switch(format)
   {
     case 1:
        $newDate = $num[0].$num[1]."/".$num[2].$num[3]."/".$num[4].$num[5].$num[6]$num[7] ;
        Break;
        // .... 
   }
 return $newDate;
}

假设您的日期字符串始终是固定宽度的格式mmddYYYY,您可以在这里使用正则表达式替换:

$sDate = "21062013";
$output = preg_replace("/^('d{2})('d{2})('d{4})$/", "$1/$2/$3", $sDate);
echo $output;  // 21/06/2013

对于另一种更健壮和通用的方法,我们可以进行从字符串到日期的往返转换,然后以所需的格式将日期转换回字符串:

$sDate = "21062013";
$ymd = DateTime::createFromFormat('dmY', $sDate)->format('d/m/Y');
echo $ymd;  // 21/06/2013

因为您的数据来自MySQL数据库,所以在数据到达PHP之前对其进行格式化更有意义。我将展示如何将数字转换为Y-m-d日期字符串,以及如何使用SQL创建d/m/Y日期字符串:(Demo)

SELECT id,
       STR_TO_DATE(`date`,'%d%m%Y') AS `Y-m-d_format`,
       DATE_FORMAT(STR_TO_DATE(`date`,'%d%m%Y'), '%d/%m/%Y') AS `d/m/Y_format`
FROM payments

这里有一些可行的PHP技术为您的dmY格式的字符串:(演示)

$payments['date'] = 21062013;
  • 在第2和第4个位置注入斜杠:

    echo preg_replace('/'d'd'K/', '/', $payments['date'], 2);
    

  • 解析为三个单独的字符串,然后用斜杠内爆:

    echo implode('/', sscanf($payments['date'], '%2s%2s%4s'));
    

  • 创建一个Datetime对象,然后以新的格式输出:

    echo DateTime::createFromFormat('dmY', $payments['date'])->format('d/m/Y');
    
    相当于:

    echo date_create_from_format('dmY', $payments['date'])->format('d/m/Y');
    

因为你的日期字符串在dmY中,PHP的strtotime()不能正确解析它:

  • // DO NOT USE echo date('d/m/Y', strtotime($payments['date']));