PHP 获取今日、昨日、本周、上周、本月的等等常用的起始时间戳和结束时间戳的时间处理类

PHP 获取今日、昨日、本周、上周、本月的等等常用的起始时间戳和结束时间戳的时间处理类:

全部方法:

01、返回今日开始和结束的时间戳。

02、返回昨日开始和结束的时间戳。

03、返回本周开始和结束的时间戳。

04、返回上周开始和结束的时间戳。

05、返回本月开始和结束的时间戳。

06、返回上个月开始和结束的时间戳。

07、返回今年开始和结束的时间戳。

08、返回去年开始和结束的时间戳。

09、获取几天前零点到现在、昨日结束的时间戳。

10、返回几天前的时间戳。

11、返回几天后的时间戳。

12、天数转换成秒数。

13、周数转换成秒数。

类源码:

  1. <?php  
  2. class Time  
  3. {  
  4.     /** 
  5.      * 返回今日开始和结束的时间戳 
  6.      * 
  7.      * @return array 
  8.      */  
  9.     public static function today()  
  10.     {  
  11.         return [  
  12.             mktime(0, 0, 0, date('m'), date('d'), date('Y')),  
  13.             mktime(23, 59, 59, date('m'), date('d'), date('Y'))  
  14.         ];  
  15.     }  
  16.    
  17.     /** 
  18.      * 返回昨日开始和结束的时间戳 
  19.      * 
  20.      * @return array 
  21.      */  
  22.     public static function yesterday()  
  23.     {  
  24.         $yesterday = date('d') - 1;  
  25.         return [  
  26.             mktime(0, 0, 0, date('m'), $yesterdaydate('Y')),  
  27.             mktime(23, 59, 59, date('m'), $yesterdaydate('Y'))  
  28.         ];  
  29.     }  
  30.    
  31.     /** 
  32.      * 返回本周开始和结束的时间戳 
  33.      * 
  34.      * @return array 
  35.      */  
  36.     public static function week()  
  37.     {  
  38.         $timestamp = time();  
  39.         return [  
  40.             strtotime(date('Y-m-d'strtotime("this week Monday"$timestamp))),  
  41.             strtotime(date('Y-m-d'strtotime("this week Sunday"$timestamp))) + 24 * 3600 - 1  
  42.         ];  
  43.     }  
  44.    
  45.     /** 
  46.      * 返回上周开始和结束的时间戳 
  47.      * 
  48.      * @return array 
  49.      */  
  50.     public static function lastWeek()  
  51.     {  
  52.         $timestamp = time();  
  53.         return [  
  54.             strtotime(date('Y-m-d'strtotime("last week Monday"$timestamp))),  
  55.             strtotime(date('Y-m-d'strtotime("last week Sunday"$timestamp))) + 24 * 3600 - 1  
  56.         ];  
  57.     }  
  58.    
  59.     /** 
  60.      * 返回本月开始和结束的时间戳 
  61.      * 
  62.      * @return array 
  63.      */  
  64.     public static function month($everyDay = false)  
  65.     {  
  66.         return [  
  67.             mktime(0, 0, 0, date('m'), 1, date('Y')),  
  68.             mktime(23, 59, 59, date('m'), date('t'), date('Y'))  
  69.         ];  
  70.     }  
  71.    
  72.     /** 
  73.      * 返回上个月开始和结束的时间戳 
  74.      * 
  75.      * @return array 
  76.      */  
  77.     public static function lastMonth()  
  78.     {  
  79.         $begin = mktime(0, 0, 0, date('m') - 1, 1, date('Y'));  
  80.         $end = mktime(23, 59, 59, date('m') - 1, date('t'$begin), date('Y'));  
  81.    
  82.         return [$begin$end];  
  83.     }  
  84.    
  85.     /** 
  86.      * 返回今年开始和结束的时间戳 
  87.      * 
  88.      * @return array 
  89.      */  
  90.     public static function year()  
  91.     {  
  92.         return [  
  93.             mktime(0, 0, 0, 1, 1, date('Y')),  
  94.             mktime(23, 59, 59, 12, 31, date('Y'))  
  95.         ];  
  96.     }  
  97.    
  98.     /** 
  99.      * 返回去年开始和结束的时间戳 
  100.      * 
  101.      * @return array 
  102.      */  
  103.     public static function lastYear()  
  104.     {  
  105.         $year = date('Y') - 1;  
  106.         return [  
  107.             mktime(0, 0, 0, 1, 1, $year),  
  108.             mktime(23, 59, 59, 12, 31, $year)  
  109.         ];  
  110.     }  
  111.    
  112.     public static function dayOf()  
  113.     {  
  114.    
  115.     }  
  116.    
  117.     /** 
  118.      * 获取几天前零点到现在/昨日结束的时间戳 
  119.      * 
  120.      * @param int $day 天数 
  121.      * @param bool $now 返回现在或者昨天结束时间戳 
  122.      * @return array 
  123.      */  
  124.     public static function dayToNow($day = 1, $now = true)  
  125.     {  
  126.         $end = time();  
  127.         if (!$now) {  
  128.             list($foo$end) = self::yesterday();  
  129.         }  
  130.    
  131.         return [  
  132.             mktime(0, 0, 0, date('m'), date('d') - $daydate('Y')),  
  133.             $end  
  134.         ];  
  135.     }  
  136.    
  137.     /** 
  138.      * 返回几天前的时间戳 
  139.      * 
  140.      * @param int $day 
  141.      * @return int 
  142.      */  
  143.     public static function daysAgo($day = 1)  
  144.     {  
  145.         $nowTime = time();  
  146.         return $nowTime - self::daysToSecond($day);  
  147.     }  
  148.    
  149.     /** 
  150.      * 返回几天后的时间戳 
  151.      * 
  152.      * @param int $day 
  153.      * @return int 
  154.      */  
  155.     public static function daysAfter($day = 1)  
  156.     {  
  157.         $nowTime = time();  
  158.         return $nowTime + self::daysToSecond($day);  
  159.     }  
  160.    
  161.     /** 
  162.      * 天数转换成秒数 
  163.      * 
  164.      * @param int $day 
  165.      * @return int 
  166.      */  
  167.     public static function daysToSecond($day = 1)  
  168.     {  
  169.         return $day * 86400;  
  170.     }  
  171.    
  172.     /** 
  173.      * 周数转换成秒数 
  174.      * 
  175.      * @param int $week 
  176.      * @return int 
  177.      */  
  178.     public static function weekToSecond($week = 1)  
  179.     {  
  180.         return self::daysToSecond() * 7 * $week;  
  181.     }  
  182.    
  183.     private static function startTimeToEndTime()  
  184.     {  
  185.    
  186.     }  
  187. }  
  188.    
  189. ?> 
<think>嗯,用户这次想要获取Python中当前时间戳起始时间结束时间的实现方法。用户已经给出了相关引用,说明ta对时间戳的操作有基本了解,但需要更具体的应用场景实现。用户提到“起始时间结束时间”,这应该是指时间范围的标记,比如记录某段代码的执行时间,或者统计某个时间区间的数据。需要提供从获取时间戳到计算时间差的完整解决方案。考虑设计一个可以测量代码执行时间的示例,因为这是很常见的应用场景。用户可能是个开发者,正在做性能优化或监控相关的开发。根据引用资料,time模块是最基础的时间戳获取方式。但考虑到用户可能需要更精确的时间计算,准备引入timeit模块作为备选方案。同时注意到引用中提到matplotlib绘制时间的问题,虽然用户这次没提可视化需求,但可以留作扩展点。对于时间范围计算,考虑提供两种方式:基于时间戳的数值计算基于datetime的面向对象操作。数值计算适合简单场景,比如性能测试;对象操作适合需要处理日期边界的情况(如跨日统计)。在示例中准备展示两种方式的完整闭环:获取时间-执行任务-计算差值。示例代码计划包含三个关键功能点:基础时间戳获取、代码块执行时间计算(作为起始/结束的典型应用)、带容错的时间字符串转时间戳。同时考虑说明输出结果的单位转换,避免毫秒/秒的混淆。最后梳理知识点结构:将核心方法拆解为时间戳获取时间差计算两大,在每中展示不同场景下的最优方案。这样用户能根据自己需求快速找到对应实现。</think> 以下是Python中获取时间戳、记录时间范围(起始/结束时间)的完整实现及示例代码: ### 一、基础时间操作 ```python import time import datetime # 1. 当前时间戳 (浮点数,单位:秒) current_timestamp = time.time() print(f"当前时间戳: {current_timestamp:.6f}") # 精确到微秒 # 2. 起始时间戳 (记录代码开始执行时间) start_time = time.time() # ---- 模拟耗时操作 ---- time.sleep(1.5) # 模拟1.5秒的任务 # ---------------- # 3. 结束时间戳 (记录代码结束时间) end_time = time.time() ``` ### 二、计算时间差 ```python # 方法1: 直接计算时间差 (秒) duration = end_time - start_time print(f"任务耗时: {duration:.3f} 秒") # 方法2: 使用datetime对象计算 start_dt = datetime.datetime.fromtimestamp(start_time) end_dt = datetime.datetime.fromtimestamp(end_time) time_diff = end_dt - start_dt print(f"格式化耗时: {time_diff.total_seconds():.3f} 秒") ``` ### 三、完整示例 (包含异常处理) ```python import time def measure_performance(): try: # 记录起始时间戳 start = time.time() print(f"▶ 开始时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start))}") # --- 执行核心任务 --- result = 0 for i in range(1000000): result += i * i # ------------------ # 记录结束时间戳 end = time.time() print(f"■ 结束时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end))}") # 计算结果 elapsed = end - start print(f"⏱ 耗时: {elapsed:.4f} 秒 | 时间戳范围: [{start:.3f} - {end:.3f}]") return result except Exception as e: print(f"执行出错: {str(e)}") return None if __name__ == "__main__": measure_performance() ``` **输出示例**: ``` ▶ 开始时间: 2023-08-15 14:30:25 ■ 结束时间: 2023-08-15 14:30:26 ⏱ 耗时: 0.8725 秒 | 时间戳范围: [1692073825.391 - 1692073826.263] ``` ### 四、关键知识点 1. **`time.time()`** - 返回自1970-01-01 UTC以来的**秒级浮点时间戳** - 可精确到微秒(小数点后6位) 2. **`datetime.datetime.fromtimestamp()`** ```python dt = datetime.datetime.fromtimestamp(1692073825.391) print(dt.strftime("%Y/%m/%d %H:%M:%S")) # 输出: 2023/08/15 14:30:25 ``` 3. **计算精度说明** 系统级时间戳精度通常为毫秒级(Windows)或微秒级(Linux),适合性能测试[^1]。 4. **时间范围应用场景** ```python # 数据库查询示例 query = f"SELECT * FROM logs WHERE timestamp BETWEEN {start_time} AND {end_time}" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值