前几天看他人项目代码,有一功能为统计最近1月某功能的使用总量,代码实现竟然不做时间连续处理,出现下面情形。
N星期前,也曾看到部分代码,时间连续处理竟然是以一天为时间间隔查询数据库,最近1月的统计竟然需要查询30+次。
在此列一下按照日统计数据的sql和自己写的一个时间连续处理函数.
1.测试表为
test
字段1:increase(int型,表每天增加)
字段2:optime(int型,为时间戳,表示记录增加时间)
--按日查询--
$start = strtotime('2012-02-21');
$end = strtotime('2012-03-03');
$sql="select date(optime) as time , sum(increase) as increase from test where optime between {$start} and {$end} group by date(optime)";
按月查询+按年查询 用month和year函数即可。
2.时间连续处理函数
/**
* @param $start 开始时间戳
* @param $end 结束数据戳
* @param $array 查询结果
* @return array dateMap数据
*/
function dateMap($start,$end,$array){
$dates = range($start, $end, 24*60*60);
$dates = array_map(create_function('$v', 'return date("Y-m-d", $v);'), $dates);
$zero = array_fill_keys($dates,0);
$result = array_merge($zero,$array);
return $result;
}
测试如下
$start = strtotime('2012-02-21');
$end = strtotime('2012-03-03');
$other=array('2012-02-25'=>20,'2012-02-21'=>30,'2012-03-01'=>40,'2012-02-27'=>50);
结果
Array
(
[2012-02-21] => 30
[2012-02-22] => 0
[2012-02-23] => 0
[2012-02-24] => 0
[2012-02-25] => 20
[2012-02-26] => 0
[2012-02-27] => 50
[2012-02-28] => 0
[2012-02-29] => 0
[2012-03-01] => 40
[2012-03-02] => 0
[2012-03-03] => 0
)
还有一个需注意的地方
$end=strtotime('2012-03-30');
$start=strtotime('-1 month',$end);
echo date('Y-m-d',$start);
结果是:2012-03-01 因为-1 month的实际实现就是-30天而已,这个应该是个BUG吧。 可以用下面方式来实现:
$start=strtotime('-1 month',strtotime(date('Y-m-01 00:00:00',$end)));
echo date('Y-m-d',$start);
- 大小: 9.3 KB
分享到:
相关推荐
- **功能描述**:`uniqid()` 函数根据以微秒计算的当前时间生成一个唯一的ID。这对于生成会话ID、临时文件名等非常有用。 - **语法**: ```php uniqid([string $prefix = ''], [bool $more_entropy = false]): ...
在处理大量数据的场景下,使用implode()可以有效地减少处理时间。 最后,我们来探讨strpos()函数,它用于查找字符串中子字符串首次出现的位置。strpos()函数是区分大小写的,并且它的效率往往高于正则表达式的查找...
`time_sleep_until()` 函数暂停脚本直到指定的时间。这在需要精确控制执行时间的情况下很有用,例如定时任务。 #### time_nanosleep() `time_nanosleep()` 函数类似于 `sleep()`,但它可以提供更精细的控制(纳秒...
值得注意的是,这些函数在处理跨月份和跨年份的时间时依然有效,因为它们考虑了时间的循环性和日期的连续性。在PHP中,只要正确使用这些基础函数并结合逻辑判断,就可以实现复杂的时间处理功能。而本文所介绍的这些...
**1.1 Array处理函数** - **`array_change_key_case()`**: 将数组的所有键名转换为小写或大写。 - **`array_chunk()`**: 将数组分割成多个数组块。 - **`array_column()`**: 从输入数组的每条记录中抽取一个字段...
- **函数:** 提供了处理日期和时间值的函数,例如 `mysql_datetime()`。 **2.10 CAPI 线程函数介绍** - **线程函数:** 提供了一组用于管理线程的函数,以确保并发访问数据库的安全性。 **2.11 CAPI 嵌入式...
6. **时间处理**:利用`strtotime()`和`date()`函数处理与时间相关的逻辑,比如计算今天开始和结束的时间戳。 ### PHP与MySQL交互 实现PHP与MySQL数据库的交互,通常有以下步骤: 1. **数据库连接**:使用PDO或者...
总的来说,PHPCalendar 扩展为 PHP 开发者提供了一套强大的工具,能够方便地处理日期和时间的复杂转换,尤其是在涉及多种历法的应用场景中。了解并熟练运用这些函数和常量,可以极大地提高日期处理的效率和准确性。
例如,可以使用构造函数接收图片资源或图片路径,然后通过方法链的形式提供连续的图片处理操作。最终保存或输出处理后的图片时,也可以提供多种格式供选择。 需要注意的是,实际开发中,由于图片处理操作通常是计算...
除了创建日期对象,PHP还提供了`date()`和`time()`函数来处理简单的日期和时间。`date()`函数用于格式化当前或者指定的Unix时间戳,而`time()`函数返回当前Unix时间戳: ```php echo date('Y-m-d H:i:s', time()); ...
最后,要注意在实际的Web开发环境中处理时间问题时,可能还会涉及时区的转换、夏令时的影响等因素,因此在处理跨时区的时间段交集问题时,开发者需要额外注意这些问题以保证函数的准确性和适用性。
PHP提供了一个内建函数`php_strip_whitespace()`,用于删除源代码中的注释和空白,但此函数在处理`heredoc`语法时可能会遇到问题。为了解决这个问题,我们可以使用自定义的`strip_whitespace`函数,如题目中所提及的...
该函数在处理数据排序时非常实用,尤其是在需要倒序显示数组内容的场景中。`array_reverse()`自PHP 4版本起就被引入,并在后续的PHP 5和PHP 7版本中得到保持。 **函数定义:** `array_reverse(array $array, bool ...
"counter" 扩展 - 一个连续的实例 PHP 5 构建系统 扩展的结构 PDO 驱动 扩展相关 FAQ Zend Engine 2 API 参考 Zend Engine 2 操作码列表 Zend Engine 1 FAQ — FAQ:常见问题 一般信息 邮件列表 获取 PHP 数据库问题...
关于PHP中file_get_contents函数超时处理的方法,这篇文章进行了深入的解析和介绍。file_get_contents函数作为PHP中用于读取文件或者远程URL内容的内置函数,非常方便和强大。但就像所有涉及网络的函数一样,file_...
PHP提供了丰富的date和time函数,可以方便地获取当前时间,格式化日期,比较时间等。 5. 错误处理和安全性:为了确保系统的稳定运行,需要对可能出现的错误进行处理,如无效的登录尝试、未找到用户、数据库连接失败...
•"counter" 扩展 - 一个连续的实例 •PHP 5 构建系统 •扩展的结构 •PDO 驱动 •扩展相关 FAQ •Zend Engine 2 API 参考 •Zend Engine 2 操作码列表 •Zend Engine 1 •FAQ — FAQ:常见问题•一般信息 •邮件...
◦"counter" 扩展 - 一个连续的实例 ◦PHP 5 构建系统 ◦扩展的结构 ◦PDO 驱动 ◦扩展相关 FAQ ◦Zend Engine 2 API 参考 ◦Zend Engine 2 操作码列表 ◦Zend Engine 1 •FAQ — FAQ:常见问题◦一般信息 ◦邮件...
■"counter" 扩展 - 一个连续的实例 ■PHP 5 构建系统 ■扩展的结构 ■PDO 驱动 ■扩展相关 FAQ ■Zend Engine 2 API 参考 ■Zend Engine 2 操作码列表 ■Zend Engine 1 ■FAQ — FAQ:常见问题 ■一般信息 ■邮件...
6. **日期函数**:处理日期和时间的操作,如`ADD_MONTHS`增加月份等。 7. **条件函数**:如`IF`和`CASE WHEN`用于根据条件选择不同的值。 8. **字符串函数**:如`CONCAT`连接字符串等。 #### 四、聚合函数 聚合函数...