yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Quintiq file version 2.0
#parent: #root
Method GetLastMonth (
  DateTime timestamp
) as DateTime id:Method_Kpi_GlobalState_GetLastMonth
{
  #keys: '[136398.1.809533354]'
  Body:
  [*
    // Returns the timestamp with its month reduced by 1. 
    // Takes year-crossing into account.
                           
    timezone := TimeZone::ObjectTimeZone( KpiTracker );
    
    out := timestamp.StartOfMonth( timezone )
           .AddAsPeriod( timezone, -Duration::Days( 1 ) )
           .StartOfMonth( timezone )
           .AddAsPeriod(  timezone, timestamp - timestamp.StartOfMonth( timezone ) );
    
    if( out.StartOfMonth( timezone ) = timestamp.StartOfMonth( timezone ) )
    {
      // When it is 29-31 March, the Feb do not have those dates, then just get Feb 28
      out:= timestamp.StartOfMonth( timezone ).AddAsPeriod( timezone, -Duration::Days( 1 ) );
    }
                          
    return out;
  *]
}