What is the value of the ISO 8601 duration `P1M` (in seconds)?

前端 未结 2 1570
庸人自扰
庸人自扰 2021-01-18 14:59

Suppose I have an ISO 8601 duration, expressed as \"P1M\". Phrased colloquially, this means \"one month.\" Is there a standard rule for converting this into a n

相关标签:
2条回答
  • 2021-01-18 15:10

    You are right, an ISO 8601 duration is dependent of the context. A duration is a period/an interval of time between two dates.

    Example :

    2020-01-01/2020-02-01 = P1M = P31D
    2020-02-01/2020-03-01 = P1M = P29D
    2019-02-01/2019-03-01 = P1M = P28D
    

    If you want a fixed duration indepedent of the context, use the day notation P30D, P60D, P90D... instead.

    The same applies for years :

    2019-01-01/2020-01-01 = P1Y = P12M = P365D
    2020-01-01/2021-01-01 = P1Y = P12M = P366D
    

    If you can't have context information about a duration, for example P1M retrieved from database or given by user input, use by default today's context.

    //What is a duration of one month in seconds ?
    P1M = ? (no context)
    //Use default context
    Today = 2020-03-31
    2020-03-31/P1M = 2020-03-31/2020-04-31
    => P1M = P30D
    //A month contains 2 592 000 seconds
    
    0 讨论(0)
  • 2021-01-18 15:16

    From ISO 8601 documentation that I found (page 6 - http://xml.coverpages.org/ISO-FDIS-8601.pdf), it seems you are correct in that the number of seconds in a month cannot definitively be determined. However it does note that "In certain applications a month is regarded as a unit of time of 30 days", so depending on your application this may be a valid approach.

    The distinction between "Calendar Time" (Years, Months, etc) and "Absolute Time" (Hours, Minutes, Seconds, etc) is sometimes an important one. As an example, some people might complain about having 13 mortgage payments some years if they paid every 30 days as opposed to every month.

    0 讨论(0)
提交回复
热议问题