获取该日期所在季度前一个季度的最后一天的日期

Posted

技术标签:

【中文标题】获取该日期所在季度前一个季度的最后一天的日期【英文标题】:Get the date of the last day of the quarter preceding the quarter in which this date falls 【发布时间】:2020-07-25 02:33:07 【问题描述】:

给定一个日期,返回该日期所在季度前一个季度的最后一天的日期。例如

2020-04-25 => 2020-03-31
2020-06-25 => 2020-03-31
2020-09-25 => 2020-06-30
2020-10-25 => 2020-09-30

如果给定日期在第一季度,则年份减去1

2020-03-25 => 2019-12-31

【问题讨论】:

【参考方案1】:
sub MAIN(Date(Str) $date) 
    say $date.earlier(months => ($date.month - 1) % 3 + 1).last-date-in-month

这至少需要 Rakudo 2020.05。

【讨论】:

方法last-date-in-month很酷。 @lizmat - 请您解压 Date(Str) 位吗?是捕获中的调用吗? @psteve:这是一个coercion type。基本上,如果参数是Str,那么.Date 将被调用。也许更知名:Int(Str),如果是Str,则强制转换为Int。或者更短的形式Int(),它是Int(Any)的缩写:如果是Any,则强制转换为Int【参考方案2】:
sub MAIN(Str $day) 
    my Date $d       = Date.new($day);
    my Int  $year    = $d.year;
    my Int  $month   = $d.month;
    my Int  $quarter = ($month/3).ceiling; # the quarter that this date falls

    my @last-days = ('12-31', '03-31', '06-30', '09-30');

    # if the given date is in the first quarter, then `$year` minus 1
    $year-=1 if $quarter == 1; 

    say sprintf('%s-%s', $year, @last-days[$quarter-1]);
 

将以上代码保存为quarter.raku,输出为:

$ raku quarter.raku 2020-03-25
2019-12-31
 
$ raku quarter.p6 2020-04-25
2020-03-31
 
$ raku quarter.p6 2020-06-25
2020-03-31
 
$ raku quarter.p6 2020-07-25
2020-06-30

$ raku quarter.p6 2020-08-25
2020-06-30
 
$ raku quarter.p6 2020-09-25
2020-06-30
 
$ raku quarter.p6 2020-10-25
2020-09-30

【讨论】:

以上是关于获取该日期所在季度前一个季度的最后一天的日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句 如何取得指定月份的最后一天的日期

获取一个季度的第一天和最后一天以及 2 个季度的日期

SQL语句:取某个日期所在季度的最后一天,精确到时分秒

pandas通过DatetimeProperties对象获取日期对象是否是所在季度的第一天(is quarter start)筛选dataframe数据中日期对象是所在季度第一天的数据行

SQL Server学习记录之获取每月每季度每年第一天和最后一天

oracle sql 最近5个季度的最后一天