【问题标题】:Convert time() from SQL for monthly sales PHP从 SQL 转换 time() 以获取每月销售 PHP
【发布时间】:2018-06-20 15:35:58
【问题描述】:

我想从 sales 表中进行月度销售,但我使用 time() 格式存储日期数据

例子:

UserID | Product | Date
1      | Hot Dog | 1504363230
4      | Chicken | 1504695631
1      | Potato  | 1504761716
3      | Spinach | 1505003789

那么,如何在不将 Date 替换为 date() 的情况下从那里创建每月销售额?因为如果我必须更改 300K 行将需要很长时间

我该怎么办?

Select * FROM Sales WHERE UserID = UserID AND Date = ?

输出一定是这样的

UserID 1 在上个月做了 2 次交易或 UserID 1 在本月做了 3 次交易 月份

【问题讨论】:

  • 你可以在MySQL上自行转换,同样的方式过滤,换一种方式会更快。
  • 看起来你有很多好的答案。在相关说明中,请考虑将您的时间戳存储为 DATETIME。它可以作为字符串读取,您仍然可以进行数学运算。您也不会遇到最大整数大小问题
  • @devlincarnate 对不起,我不是那个意思

标签: php mysql pdo


【解决方案1】:

PHP 解决方案是在date 函数中使用第二个参数:

string date ( string $format [, int $timestamp = time() ] )

可选的时间戳参数是一个整数 Unix 时间戳,如果没有给出时间戳,则默认为当前本地时间。换句话说,它默认为 time() 的值。

【讨论】:

  • 感谢您的回答,但我不是这个意思。抱歉,我已经更清楚地编辑了帖子
【解决方案2】:

您可以在 MySQL 中使用 FROM_UNIXTIME 将 unix 时间戳转换为日期时间字符串。

SELECT FROM_UNIXTIME(`Date`) as `Datetime` FROM sales

然后您可以使用其他日期函数(例如 MONTH 或 YEAR)对此进行扩展

SELECT MONTH(FROM_UNIXTIME(`Date`)) as `Month` FROM sales

【讨论】:

  • 感谢您的回答,但我不是这个意思。抱歉,我已经更清楚地编辑了帖子
【解决方案3】:

编辑:
我认为这应该对你有用。我猜你想避免 PHP 的 date() 但 MySQL 的 DATE() 没问题。

SELECT
    COUNT(*) AS nb_transaction,
    UserID
FROM
    sales
WHERE
    DATE(`Date`) LIKE '2018-06-%'

当然用您要查找的月份替换月份。


SQL(会比 PHP 更快):
您可以使用FROM_UNIXTIME() 将任何UNIX Timestamp 转换为任何格式:
FROM_UNIXTIME(`Date`, '%Y %D %M %h:%i:%s')


PHP:
time() 函数返回 UNIX Timestamp

如果你想用一个来显示日期,你可以使用DateTime::setTimestamp:

$date = new DateTime();
$date->setTimestamp($row['Date']);
echo $date->format('Y-m-d H:i:s');    // Hot Dog = 2017-09-02 14:40:30

或者很快:

echo (new DateTime())->setTimestamp($row['Date'])->format('Y-m-d H:i:s');

【讨论】:

  • 感谢您的回答,但我不是这个意思。抱歉,我已经更清楚地编辑了帖子
  • 嗨@Zeeeeth,我更新了我的答案。告诉我这不是你要找的:)
【解决方案4】:
$timestamp = 1517317337107; $date=date('Y-m-d H:i:s',
   $timestamp/1000); 
 echo "date and time : ". $date."<br>";
   $month=date('Y-m-d',$timestamp/1000);
 echo "only date : ".$month."<br>";


#output
date and time : 2018-01-30 13:02:17
only date : 2018-01-30

希望这会有所帮助

【讨论】:

  • 我不喜欢投反对票,但是已经发布了带有日期的解决方案,并且您除以 1000 将导致基于 OP 输入的无效结果。
  • 感谢您的回答,但我不是这个意思。抱歉,我已经更清楚地编辑了帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2013-02-08
相关资源
最近更新 更多