计算昨天的日期

本文解决了一个在CRM项目中计算前一天日期的问题。原本的方法试图通过简单的字符串操作减一天,但会导致如20180800这样的无效日期。正确的做法是先将日期转换为时间戳,减去一天的时间戳值,再将结果转换回日期格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

碰到的小坑:

  在crm项目的package_pay_gather表中,使用int_day直接获取日期,但是对于昨天的日期计算错误,之前的做法是:

date('Ymd') - '1';

这样做发现是不对的,例如今天是20180801,此种方法计算出来后,昨天的时间是20180800,显然时间是不对的。
  正确的做法是,先将日期转换成时间戳,然后通过时间戳进行计算,然后在将时间戳转换成日期,如下:

date('Ymd', strtotime(date('Ymd'))-24*60*60);

以此来计算昨天的时间。
记录一下。

<think>我们正在处理用户的问题:如何用Python获取昨天日期 根据引用资料,有多种方法可以实现。我们可以总结如下: 方法1:使用datetime模块的date和timedelta - 获取今天日期 - 使用timedelta减去一天 方法2:使用datetime模块的datetime和timedelta(类似方法1,但可以处理时间) - 获取当前时间(包括时间部分) - 减去一天 方法3:使用Pandas(如果用户已经使用Pandas,但用户问题没有特别要求,所以我们可以先介绍标准库方法) 我们将按照以下步骤回答: 1. 导入必要的模块(datetime) 2. 计算今天日期 3. 减去一天的时间差 4. 格式化输出(如果需要字符串) 注意:用户可能只需要日期对象,也可能需要字符串格式(如'YYYY-MM-DD') 根据引用[2]和[3]中的示例,我们可以提供两种方式:返回日期对象或返回字符串。 我们还可以提供使用datetime.now()的方法(如引用[4])。 由于用户没有指定格式,我们将提供两种常见的格式:日期对象和字符串('%Y-%m-%d'格式)。 另外,我们也可以提供使用pandas的方法(如引用[1]),但考虑到用户可能没有安装pandas,我们主要介绍标准库方法。 步骤: 1. 导入datetime模块 2. 使用date.today()获取今天日期,然后减去timedelta(days=1)得到昨天日期(返回date对象) 3. 或者使用datetime.now()获取当前时间,然后减去timedelta(days=1)得到昨天的时间(包含时间部分),然后可以转换为日期部分。 我们将提供两个主要示例: 示例1:返回昨天日期对象(不包含时间) 示例2:返回格式化的字符串 同时,我们也可以提供一个函数,方便用户调用。 根据引用[2]和[3]的代码,我们可以这样写: 示例代码1(返回日期对象): import datetime today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) 示例代码2(返回字符串): import datetime yesterday_str = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d') 或者使用datetime.now()(适用于需要时间戳的情况): from datetime import datetime, timedelta yesterday = datetime.now() - timedelta(days=1) # 然后可以提取日期部分:yesterday_date = yesterday.date() 考虑到用户可能只需要日期,我们重点使用date对象。 我们将组织回答如下: 1. 直接介绍方法 2. 提供代码示例 3. 解释代码 同时,我们根据指令,需要生成相关问题。 注意:在回答中,我们引用了站内资料,所以需要在引用的地方添加引用标识。 例如,我们参考了引用[2]和[3]的方法,所以会在代码示例后添加引用标识。 另外,用户要求使用中文回答。 我们开始回答:</think>### Python 获取昨天日期的方法 在 Python 中获取昨天日期主要有两种常用方法,均基于标准库 `datetime` 实现: #### 方法 1:使用 `date.today()` 和 `timedelta`(推荐) ```python from datetime import date, timedelta def get_yesterday(): today = date.today() # 获取今天日期对象 one_day = timedelta(days=1) # 定义一天的时间间隔 yesterday = today - one_day # 计算昨天日期 return yesterday # 调用示例 print(get_yesterday()) # 输出: 2023-10-26(实际日期) ``` **说明**: 1. `date.today()` 返回当前本地日期 2. `timedelta(days=1)` 表示 1 天的时间差 3. 日期对象直接支持加减运算[^2][^4] #### 方法 2:使用 `datetime.now()` 和 `strftime` 格式化 ```python from datetime import datetime, timedelta def get_yesterday_str(): yesterday = datetime.now() - timedelta(days=1) return yesterday.strftime('%Y-%m-%d') # 格式化为字符串 # 调用示例 print(get_yesterday_str()) # 输出: "2023-10-26" ``` **说明**: - `strftime('%Y-%m-%d')` 将日期格式化为 `年-月-日` 字符串 - 支持自定义格式(如 `'%Y/%m/%d'` 或 `'%d-%b-%Y'`)[^3][^4] #### 使用场景对比 | 方法 | 返回类型 | 适用场景 | |------|----------|----------| | 方法1 | `datetime.date` | 需要日期计算或比较 | | 方法2 | `字符串` | 直接用于显示或存储 | > **注意**:这些方法会自动处理月末/年末等边界情况(如 10月1日的前一天是 9月30日)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值