Изменение формата даты при echo в php

#php #mysqli

#php #mysqli

Вопрос:

Это мой код, он работает отлично, за исключением того, что я хочу, чтобы дата на кнопках была отформатирована как четверг 15th, а не 2019-08-15. Даты извлекаются из базы данных MySQLI, где формат даты — 2019-08-15. Я не могу изменить формат выбора даты, так как мне нужен формат даты в значении кнопки, чтобы соответствовать формату в базе данных. Поэтому я только хочу изменить формат на кнопке.

Вот рабочий пример

Я действительно ценю всю вашу помощь!!

 <?php
include 'DBController.php';
$db_handle = new DBController();
$countryResult = $db_handle->runQuery("SELECT DISTINCT date FROM okm_concerts_2019 ORDER BY date ASC");
?>

<html>
<head>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
       <div id="demo-grid">
  <form method="post" action="index.php">
 
                <?php
                        if (! empty($countryResult)) {
                            foreach ($countryResult as $key => $value) 
                            {
                                echo '<button name="country[]" value=' . $countryResult[$key]['date'] .'">' . $countryResult[$key]['date'] . '</button>';
                            }
                        }
                        ?>
                
    
                <?php
                if (! empty($_POST['country'])) {
                    ?>
                    <table cellpadding="10" cellspacing="1">

                <thead>
                    <tr>
                        
                        <th><strong>Konsert</strong></th>
                        <th><strong>Start</strong></th>
                        <th><strong>Venue</strong></th>
                    </tr>
                </thead>
                <tbody>
                <?php
                    $query = "SELECT * FROM okm_concerts_2019
                    JOIN okm_locations ON okm_concerts_2019.location_id = okm_locations.id"
                    ;
                    $i = 0;
                    $selectedOptionCount = count($_POST['country']);
                    $selectedOption = "";
                    while ($i < $selectedOptionCount) {
                        $selectedOption = $selectedOption . "'" . $_POST['country'][$i] . "'";
                        if ($i < $selectedOptionCount - 1) {
                            $selectedOption = $selectedOption . ", ";
                        }
                        
                        $i   ;
                    }
                    $query = $query . " WHERE date in (" . $selectedOption . ") ORDER BY time_start ASC";
                    
                    $result = $db_handle->runQuery($query);
                 
                     
                }
                if (! empty($result)) {
                    foreach ($result as $key => $value) {
                        ?>
                
    
    
</body>
</html> 

Ответ №1:

Обычный способ — проанализировать данные даты, createFromFormat а затем отобразить их format .

Вы можете использовать следующий код, чтобы изменить формат отображения ваших кнопок (с ГГГГ-ММ-ДД на что-то вроде Четверг, 15 августа 2019 года) :

 <?php

$xstring=$countryResult[$key]['date'];

// example:  $xstring="2019-08-15";

$ndate = DateTime::createFromFormat('Y-m-d', $xstring);

echo $ndate->format('l dS, F Y');

?>
 

Ответ №2:

Вы можете форматировать даты непосредственно в БД, используя следующий запрос:

 SELECT DISTINCT DATE_FORMAT(date, '%W, %D') FROM okm_concerts_2019 ORDER BY date ASC
 

Посмотрите MySQL fiddle здесь

Ответ №3:

 <?php
include 'DBController.php';
$db_handle = new DBController();
$countryResult = $db_handle->runQuery("SELECT DISTINCT date FROM okm_concerts_2019 ORDER BY date ASC");
?>

<html>
<head>
    <link href="style.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<div id="demo-grid">
    <form method="post" action="index.php">

        <?php
        if (!empty($countryResult)) {
            foreach ($countryResult as $key => $value) {
                echo '<button name="country[]" value=' . $countryResult[$key]['date'] . '">' . date('l jS ', strtotime($countryResult[$key]['date'])) . '</button>';
            }
        }
        ?>


        <?php
        if (!empty($_POST['country'])) {
        ?>
        <table cellpadding="10" cellspacing="1">

            <thead>
            <tr>

                <th><strong>Konsert</strong></th>
                <th><strong>Start</strong></th>
                <th><strong>Venue</strong></th>
            </tr>
            </thead>
            <tbody>
<?php
$query = "SELECT * FROM okm_concerts_2019
                    JOIN okm_locations ON okm_concerts_2019.location_id = okm_locations.id";
$i = 0;
$selectedOptionCount = count($_POST['country']);
$selectedOption = "";
while ($i < $selectedOptionCount) {
    $selectedOption = $selectedOption . "'" . $_POST['country'][$i] . "'";
    if ($i < $selectedOptionCount - 1) {
        $selectedOption = $selectedOption . ", ";
    }

    $i  ;
}
$query = $query . " WHERE date in (" . $selectedOption . ") ORDER BY time_start ASC";

$result = $db_handle->runQuery($query);


}
if (!empty($result)) {
    foreach ($result as $key => $value) {
        ?>


</body>
</html>
 

Когда вы отображаете дату, вы можете отформатировать дату с помощью функции date . Функция Date принимает первый параметр в качестве формата даты. Во втором параметре я просто конвертирую дату в временную метку Unix, чтобы дату можно было легко преобразовать в любой формат. Вы можете просмотреть поддерживаемый формат даты отсюда.