在Perl中计算两个日期之间的天数
我正在使用Perl创建一个脚本,该脚本将通过电子邮件发送密码过期通知 我有两个约会:在Perl中计算两个日期之间的天数,perl,datetime,Perl,Datetime,我正在使用Perl创建一个脚本,该脚本将通过电子邮件发送密码过期通知 我有两个约会: 设置用户密码的日期 用户密码将过期的日期(设置密码后180天) 我不知道如何计算这两个日期之间的差异 以下是每个变量的输出: pwdLastSet: 2015-02-12 pwdExpireDate: 2015-08-11T00:00:00 非常感谢任何帮助…一直疯狂地在谷歌上搜索,但我想不出来…谢谢 我尝试了以下代码行: my $pwdDaysLeft = int(($p
pwdLastSet: 2015-02-12
pwdExpireDate: 2015-08-11T00:00:00
非常感谢任何帮助…一直疯狂地在谷歌上搜索,但我想不出来…谢谢
我尝试了以下代码行:
my $pwdDaysLeft = int(($pwdExpirationDate - $pwdLastSet) / 86400);
但出现以下错误:
Only a DateTime::Duration or DateTime object can be subtracted from a DateTime object. at pwdreminder.pl line 65
所以,我们这里有三个日期:
- 上次设置密码的日期。它以存储在
中的格式为$pwdLastSet
的字符串开始,然后将其解析为存储在YYYY-MM-DD
中的日期时间对象$pwdLastSet\u dt
- 当前密码过期的日期。这是通过将
天添加到$maxPwdAge
中来计算的,它给出了一个DateTime对象,然后该对象存储在$pwdLastSet_dt
中$pwdExpirationDate
- 当前日期。在您当前的代码中,您不需要计算
my $diff = $pwdExpirationDate - $current_date;
只要这两个对象都是DateTime对象,我们就会得到一个DateTime::Duration对象,然后我们可以询问天数
DateTime有一个将给出当前日期的today()
方法。因此,我们的代码变成:
# Use delta_days() to get a duration object that just contains days
my $diff = $pwdExpirationDate->delta_days(DateTime->today);
print $diff->in_units('days');
所以,我们这里有三个日期:
- 上次设置密码的日期。它以存储在
中的格式为$pwdLastSet
的字符串开始,然后将其解析为存储在YYYY-MM-DD
中的日期时间对象$pwdLastSet\u dt
- 当前密码过期的日期。这是通过将
天添加到$maxPwdAge
中来计算的,它给出了一个DateTime对象,然后该对象存储在$pwdLastSet_dt
中$pwdExpirationDate
- 当前日期。在您当前的代码中,您不需要计算
my $diff = $pwdExpirationDate - $current_date;
只要这两个对象都是DateTime对象,我们就会得到一个DateTime::Duration对象,然后我们可以询问天数
DateTime有一个将给出当前日期的today()
方法。因此,我们的代码变成:
# Use delta_days() to get a duration object that just contains days
my $diff = $pwdExpirationDate->delta_days(DateTime->today);
print $diff->in_units('days');
在谷歌上搜索你问题的标题,结果是:第一个结果。请解释它如何不适用于您?当我添加以下代码行时,会出现以下错误:my$pwdDaysLeft=int(($pwdExpirationDate-$pwdLastSet)/86400);“只能从DateTime对象中减去DateTime::Duration或DateTime对象。在pwdreminder.pl第65行,“什么是
convertWinFileTimestamp
?大概,$maxPwdAge
是180?您所说的pwdExpireDate
,是指$pwdexpiridiondate
?最好显示一段我们可以自己运行的自包含代码。为什么要声明并分配给$pwdlastsetdt
两次?convertWinFileTimestamp是一个将windows时间戳转换为perl可以读取的内容的子例程。很抱歉,pwdLastSet_dt两次被复制到论坛中,我会修复它。谷歌搜索你问题的标题会带来这样的结果:作为第一个结果。请解释它如何不适用于您?当我添加以下代码行时,会出现以下错误:my$pwdDaysLeft=int(($pwdExpirationDate-$pwdLastSet)/86400);“只能从DateTime对象中减去DateTime::Duration或DateTime对象。在pwdreminder.pl第65行,“什么是convertWinFileTimestamp
?大概,$maxPwdAge
是180?您所说的pwdExpireDate
,是指$pwdexpiridiondate
?最好显示一段我们可以自己运行的自包含代码。为什么要声明并分配给$pwdlastsetdt
两次?convertWinFileTimestamp是一个将windows时间戳转换为perl可以读取的内容的子例程。抱歉,pwdLastSet_dt被复制到论坛中两次,我会修复它的。原来是这样!非常感谢你!就这样!非常感谢你!