Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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 按时间排序的正确方法是什么?_Php_Datetime_Date - Fatal编程技术网

Php 按时间排序的正确方法是什么?

Php 按时间排序的正确方法是什么?,php,datetime,date,Php,Datetime,Date,将每个项目输入数据库时,我使用以下方法插入日期: date_default_timezone_set('America/New_York'); ob_start(); $createdon = date('l, F j, Y, h:i A'); ob_get_clean(); 这将输出如下内容: Tuesday, May 3, 2011, 04:50 PM 以下是查询: select test_id, why_test, date_time from the_test

将每个项目输入数据库时,我使用以下方法插入日期:

 date_default_timezone_set('America/New_York');
 ob_start();
 $createdon = date('l, F j, Y, h:i A');
 ob_get_clean();
这将输出如下内容:

  Tuesday, May 3, 2011, 04:50 PM
以下是查询:

  select test_id, why_test, date_time
  from the_test
  where p_id = '$id'
  UNION
  select pencil_id, pencil_name, date_time
  from pencils
  where p_id = '$id'
  ORDER BY 3 DESC  
现在,当我使用orderby函数时,它不能正确地执行。日期仍然混淆不清。我使用了按日期和时间描述的订单

我正在使用php/phpmyadmin

有什么想法吗?

试试看

SELECT .... ORDER BY UNIX_TIMESTAMP(`date_time`) DESC
这里的想法是把一个字符串变成一个可以排序的数字。如果您不熟悉unix时间戳,它是自1970年1月1日以来的秒数,因此,如果您可以将时间转换为秒数,则可以得到一种比较时间的简单线性方法

但我相信MySQL的UNIX_时间戳需要一个格式为1970-01-01 00:00:00的字符串


但概念仍然存在,将日期转换为unix时间戳,甚至将其存储为unix时间戳,或者MySQL的原生日期类型(如datetime或timestamp)将日期存储为字符串是错误的。您应该将日期存储为日期

MySQL选择了与日期和时间相关的适当类型;我推荐时间戳或日期时间,可能是后者;查阅手册,看看什么对你最合适

要避免在修复表结构时丢失现有数据,请执行以下操作:

添加正确类型的字段; 更新表中的每一行以将数据复制到新字段,可能使用UNIX_TIMESTAMP函数-这是一次性复制,可能需要一些时间; 删除旧字段并开始使用新字段。
ORDER BY将在该字段上正常工作,因为您现在将使用MySQL,因为它是为使用而设计的。

@hexa-hey谢谢!这是可行的,但默认情况下,只有在我尝试“描述”时,它才执行ASC。使用日期而不是“日期”返回到旧问题。@hexa:这是一件效率极低的事情。@Tomalak确实如此。但我猜他把日期存储在一个这样的字符串中。如果日期存储在这样一个字符串中,您会怎么做?告诉我。@hexa:建议修复数据库结构。您的表结构是什么样的?显示CREATE TABLE tbl_name并确保将日期存储为TIMESTAMP或DATETIME字段转换,这只会使我丢失所有日期。这是因为您将日期存储为字符串,格式是PHP无法理解的。PHP的标准日期/时间字符串格式是YYYY-MM-DD HH:MM:SS。由于日期时间字段是字符串,PHP将其内容排序为字符串,这意味着12月在2月之前时间戳会考虑当前时区,如果连接时区不同,则可以自动转换为服务器时区。DATETIME与时区没有关系。