【问题标题】:Have a field display as yyyy/mm/dd based on a text field [duplicate]基于文本字段将字段显示为 yyyy/mm/dd [重复]
【发布时间】:2014-08-26 21:58:25
【问题描述】:

使用 PHP 和 MySQL,我有一个按字段排序的事件表:sort_date,格式为 yyyy/mm/dd。

我需要在页面上显示 start_date:月 dd(例如 11 月 7 日)。

所以我将 start_date 和 end_date 字段最初设置为日期选择器。但是一旦输入了一条记录,我就不得不手动更改日期以进行格式化:月 dd。但这并没有按升序对日期进行排序,所以我有一个 Sort_date 字段……这是 yyyy/mm/dd 格式。

我希望在我的页面上这样列出活动:

8 月 27 日 时间 在哪里 地址 说明

这是可行的,但现在我将开始日期和结束日期更改为文本,sort_date 字段没有读取信息。

所以我的问题是,如何让 sort_date 字段读取 TEXT start_date 字段中的内容并将其显示为 yyyy/mm/dd?

这是我的sql语句:

SELECT * 
  FROM events
 WHERE DATE_FORMAT(sort_date, '%Y-%m-%d') >= Date_Format(Now(), '%Y-%m-%d')
   AND authorize = 1 
 ORDER BY sort_date

我该如何解决这个问题?

【问题讨论】:

  • 你看过使用 moment.ms 吗?
  • 我明白你在说什么,John 关于 STR_TO_DATE()...但是我如何让该字段从另一个字段读取文本条目?
  • 这是我的 sql 语句:SELECT * FROM events WHERE DATE_FORMAT(sort_date, '%Y-%m-%d') >= Date_Format(Now(), '%Y-%m-% d') AND 授权 = 1 ORDER BY sort_date

标签: php mysql sorting


【解决方案1】:

这需要两个步骤。

首先,您需要将文本列日期转换为 DATE 表达式。

你可以这样做,例如,

 STR_TO_DATE('2014/11/18', '%Y/%m/%d')

然后,您可以操作 DATE 表达式,对其进行排序、格式化或任何您需要做的事情。要从上面的表达式中获取November 2014,您需要这样做:

DATE_FORMAT(STR_TO_DATE('2014/11/18', '%Y/%m/%d'), '%M %Y')

要从该表达式中获取包含 11 月 1 日(每月第一天)的 DATE 值,您可以这样做。

DATE(DATE_FORMAT(STR_TO_DATE('2014/11/18', '%Y/%m/%d'), '%Y-%m-01'))

关键是您应该将基于字符串的日期转换为DATE 表达式,因为这样就可以使用各种有用的日期算术运算。

要处理问题中的WHERE 子句,请执行以下操作:

WHERE STR_TO_DATE(sort_date, '%Y/%m/%d') >= NOW()

要处理ORDER BY 子句,您可以执行以下操作:

ORDER BY STR_TO_DATE(sort_date, '%Y/%m/%d')

这里有危险。如果您的某些日期字符串格式错误,MySQL 日期转换将静默返回 NULL。所以,我会使用下面的ORDER BY 子句,然后仔细查看输出,至少一次

ORDER BY STR_TO_DATE(sort_date, '%Y/%m/%d') NULLS FIRST

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多