【问题标题】:Changing date format globally全局更改日期格式
【发布时间】:2013-04-09 20:52:01
【问题描述】:

我正在使用 PHP 和 mysql,并使用 DateDateTime 在 mysql 数据库中保存日期。在现场,我一直以它们在数据库中的保存方式显示日期。

但现在我想使用一种格式在网站的任何地方显示日期:

April 17 2013

April 17 2013 12:20:50

我知道我可以使用datestrtotime 函数以上述格式显示日期。但是有很多地方我有日期显示代码。因此,我希望将当前代码工作的过程自动化并以上述格式显示日期。

任何关于如何创建 mysql 触发器 或一些 php 魔法的想法,这些魔法可以自动转换通过 SELECT 查询运行的所有日期,而无需更改我的 sql 或 php 代码,因为我的代码中有很多地方,并且在所有地方都更改代码会过大吗?

例如:

数据库保存日期: 2013-04-16 12:41:26

选择查询: SELECT * FROM myTable

PHP: echo $row->dated; 显示 2013-04-16 12:41:26

我希望在不更改我的 php 代码的情况下,日期应该以上述格式在整个网站上全局显示。

有什么想法可以实现吗?

【问题讨论】:

  • 数据显示问题通常应在应用程序级别处理。只需以普通 SQL 格式返回日期并使用您的应用程序代码(php?或者可能是一些 javascript?)来处理格式。我更喜欢任何允许用户调整格式以适应他们的位置的方法。

标签: php mysql sql web


【解决方案1】:

您可以使用DATE_FORMAT()直接通过查询格式化

SELECT DATE_FORMAT(myDate, '%M %d %Y %h:%i') myDate
FROM   TableName

并在您的 PHP 中回显:$row->myDate


MySQL 触发器不投射值,它仅在 CrUD 操作期间触发。

【讨论】:

  • 这就是我喜欢 SO 的原因,每天都在学习新的东西!不知道那个。
  • 正如我所说,我在代码中有很多地方,我正在寻找能够自动为我执行此操作的触发器,这样我就不必修改我的代码。关于如何创建 mysql 触发器来自动转换通过SELECT 查询运行的所有日期的任何想法?
  • @Dev01 mysql 触发器不投影值。并且仅在CrUD 操作期间触发。
【解决方案2】:

我想向您推荐一种我喜欢使用的替代方法。

您应该使用epoch 时间。一个纪元时间基本上是自1 January 1970以来经过的秒数

  1. 如果我喜欢的好处是它很容易计算的话 时间上的差异,因为你只是在处理 秒而不是复杂的格式,例如sec min hrs

  2. 另一个好处是它很容易存储,因为它是 整数,因此您可以将其存储在 sql 数据库中并让您的 php 代码理解它,而不必担心格式和类似的事情。

在php中,如果你使用time()函数,它会返回纪元时间。 如果您想以用户友好的方式显示它。您可以使用以下代码:

$epoch = time();
$dt = new DateTime("$epoch"); // convert UNIX timestamp to PHP DateTime
echo $dt->format('Y-m-d H:i:s'); // output = 2012-08-15 00:00:00 

如您所见,日期的格式非常灵活,因此易于使用。

一个很好的例子来查找 1 周前的日期:

$epoch = time() - 604800; //604800 seconds = 7 days
$dt = new DateTime("$epoch"); // convert UNIX timestamp to PHP DateTime
echo $dt->format('Y-m-d H:i:s'); // output = 2012-08-15 00:00:00 

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2019-12-31
    • 1970-01-01
    • 2011-06-05
    • 2016-11-22
    相关资源
    最近更新 更多