2011-09-07 25 views
13

Wikipedia da un ejemplo de un ISO 8601 ejemplo de un repeating interval:ISO 8601 intervalo de repetición

R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M 

Esto es lo que significa:

  • R5 significa que el intervalo después de la barra se repite 5 veces .
  • 2008-03-01T13:00:00Z significa que el intervalo comienza en este datetime dado.
  • P1Y2M10DT2H30M significa que el intervalo tiene una duración de
    • 1 años
    • 2 meses
    • 10 días
    • 2 horas
    • 30 minutos

Mi problema es que yo no sé exactamente lo que se repite aquí. ¿Ocurre la repetición inmediatamente después de que termina el intervalo? ¿Puedo especificar que todos los lunes algo pasa de 13:00 a 14:00?

+0

Para "intervalos" sin una fecha de inicio o finalización específica, he creado un formato basado en ISO 8601. Se usa en estas bibliotecas [JavaScript] (https://github.com/smhg/date-frequency-js) y [PHP] (https://github.com/smhg/date-frequency-php). "todos los lunes a las 13:00:00" en su ejemplo está escrito como "F1D/WT13H0M0S". El intervalo de 1 hora (duración) se puede almacenar de forma independiente. – smhg

+0

@smhg ¿Tiene un documento que describe sus extensiones? Si es así, realmente me gustaría leerlo, si no, ¡hagámoslo! – kzh

+1

He estado leyendo en RFC 5545's [RRULE] (http://tools.ietf.org/html/rfc5545#section-3.3.10) (de iCalendar) basado en la respuesta de Mu Mind. Mi formato depende de las funciones de filtro externo para operaciones más avanzadas (por ejemplo, F (impar) W/ET10H0M0S para todos los días a las 10:00:00 en semanas impares). RRULE le permite especificar todo en línea pero no es legible por humanos (sin conocimiento del rfc). En mis casos de uso, estoy dispuesto a hacer una transacción. Así que reescribiré ambas bibliotecas usando este estándar existente. – smhg

Respuesta

7

La norma en sí misma no aclara, pero la única interpretación obvia aquí es que el intervalo se repite una detrás de la otra. Así que este intervalo recurrente:

R2/2008-03-01T13:00:00Z/P1Y2M10DT2H30M 

será equivalente a estos intervalos no recurrentes:

2008-03-01T13:00:00Z/P1Y2M10DT2H30M 
2009-05-01T15:30:00Z/P1Y2M10DT2H30M 

(Nota: mi lectura es que el número de repeticiones Qué incluye la primera aparición)

No hay forma de representar "todos los lunes de 13:00 a 14:00" dentro de ISO 8601, pero es natural hacerlo para un VEVENT en formato iCalendar. (Si pudiera hacer eso completamente dentro de ISO 8601, eso daría lugar a una serie de nuevas solicitudes de características)

+0

¿Y cómo interpretaría "R2/P1M/2008-03-01T13: 00: 00Z" (duración y fecha de finalización)? ¿Crees que es lo mismo que "R2/2008-02-01T13: 00: 00Z/P1M"? – Melanie

+0

No. Significaría que la repetición termina en esa fecha, pero continúa para el infinito en el pasado. –

+0

Como se especifica el número de '[n]', interpreto que significa que no retrocede infinitamente en el tiempo. –

Cuestiones relacionadas