#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, чтобы дату можно было легко преобразовать в любой формат. Вы можете просмотреть поддерживаемый формат даты отсюда.