Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:从YYYY-MM-DD转换为DD月,YYYY?_Php_Mysql_Datetime - Fatal编程技术网

PHP/MySQL:从YYYY-MM-DD转换为DD月,YYYY?

PHP/MySQL:从YYYY-MM-DD转换为DD月,YYYY?,php,mysql,datetime,Php,Mysql,Datetime,我在MySQL表中有一个日期列,它以以下格式表示日期:YYYY-MM-DD 我想使用PHP从数据库中检索日期,但显示方式如下:DD Month,YYYY 例如,从“2009-04-13”到“2009年4月13日” 巫婆是最好的方法吗??(我知道如何从数据库中获取日期。我只需要知道如何转换它) 我还需要用西班牙语显示月份名称。有一种方法可以做到这一点,而不必每月使用strplc或类似的东西进行翻译 我是编程新手,请详细说明 谢谢 请参阅MySQL中的函数。我想这是你最好的方法 此外,您还可以:

我在MySQL表中有一个日期列,它以以下格式表示日期:YYYY-MM-DD

我想使用PHP从数据库中检索日期,但显示方式如下:DD Month,YYYY

例如,从“2009-04-13”到“2009年4月13日”

巫婆是最好的方法吗??(我知道如何从数据库中获取日期。我只需要知道如何转换它)

我还需要用西班牙语显示月份名称。有一种方法可以做到这一点,而不必每月使用strplc或类似的东西进行翻译

我是编程新手,请详细说明

谢谢

请参阅MySQL中的函数。我想这是你最好的方法

此外,您还可以:

  • 从数据库获取您的日期
  • 在PHP中使用,以转换为unix时间
  • 然后使用格式设置时间

通过使用date()在PHP中设置区域设置时,您将能够获得西班牙语的月份名称。

最简单的方法是使用函数将输入规范化为UNIX时间戳


然后使用该函数以任意格式输出日期。请注意,您需要将UNIX时间戳作为第二个参数传递到date()。

执行以下MySQL查询:

SET lc_time_names = 'es_ES';
SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...
有了MySQLi,它将:

$mysqli->query("SET lc_time_names = 'es_ES'");
$stmt = $mysqli->prepare("SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...where id = ?");
...

另一个尚未提及的选择:

SQL:

PHP:


就我个人而言,我喜欢在MySQL中使用整数数据类型以UNIX时间戳格式存储日期。我将该整数的所有处理留给PHP完成。使表和查询尽可能简单一直对我很有好处。在我编写的代码中,主要是对日期进行某种计算。这一切都是在PHP端完成的,并且始终采用UNIX时间戳格式。以UNIX时间戳格式以外的任何格式存储或检索日期只意味着错误的另一步,使查询不那么模块化。日期的格式最好留到最后一分钟再显示。这只是我的观点,但除非在极端情况下无法处理提取后的DB值,否则日期不应格式化为SQL端

一个简化的例子:

<?php

$date = now();
$dueDate = $date + 60*60*24*7; // One week from now

$sqlInsert = "INSERT INTO reports SET `dueDate` = $date";
$resInsert = mysql_query( $sqlInsert );

$sqlSelect = "SELECT `dueDate` FROM reports";
$resSelect = mysql_query( $sqlSelect );
$rowSelect = mysql_fetch_array( $resSelect );

$DB_dueDate = $rowSelect['dueDate'];

$daysUntilDue = ( $DB_dueDate - now() ) / 60*60*24;

$formattedDueDate = date( "j F, Y", $DB_dueDate );

?>

The report is due on <?=$formattedDueDate?>.  That is <?=$daysUntilDue?> from now.

报告应于年月日提交。那是从现在开始的。

您也可以通过在MySql选择中使用UNIX\u时间戳(日期)跳过strotime()部分。但请记住,这是一个特定于MySQL的函数,将来可能无法移植。

这将帮助您根据需要进行转换:

$dob ='2009-04-13';
echo date('d M Y', strtotime($dob));
$origDate=“2018-04-20”

$newDate=日期(“d-m-Y”,strotime($origDate));
echo$newDate

谢谢。如何在下一个mysqli查询中插入SET lc\u time\u名称???$sql='从personID=?'中选择personID、姓名、日期\格式(persons.birthdate,“%d de%M,%Y”)、出生地、国家ID;请在您的代码中添加一些解释,并添加使您的解决方案优于此处已发布的其他解决方案的原因
<?php

$date = now();
$dueDate = $date + 60*60*24*7; // One week from now

$sqlInsert = "INSERT INTO reports SET `dueDate` = $date";
$resInsert = mysql_query( $sqlInsert );

$sqlSelect = "SELECT `dueDate` FROM reports";
$resSelect = mysql_query( $sqlSelect );
$rowSelect = mysql_fetch_array( $resSelect );

$DB_dueDate = $rowSelect['dueDate'];

$daysUntilDue = ( $DB_dueDate - now() ) / 60*60*24;

$formattedDueDate = date( "j F, Y", $DB_dueDate );

?>

The report is due on <?=$formattedDueDate?>.  That is <?=$daysUntilDue?> from now.
$dob ='2009-04-13';
echo date('d M Y', strtotime($dob));