Arrondir une date-heure à l’intervalle UTC inférieur
Ramenez une date-heure ISO assortie d’un fuseau au début d’un créneau répétable de minutes ou de secondes.
Lancer gratuitement
Le calcul convertit d’abord en UTC la valeur Z ou le décalage numérique fourni, puis descend au multiple de l’intervalle demandé mesuré depuis l’époque Unix. Il utilise uniquement la date-heure, l’intervalle et l’unité que vous indiquez. Le résultat convient donc au regroupement stable d’événements, aux clés de cache, aux fenêtres de rapport et aux jeux de test, sans consulter d’horloge, de paramètres régionaux, de service réseau ni de fuseau système.
Choisissez un instant et un intervalle explicites
Fournissez une date-heure ISO-8601 complète comprenant la date civile, les heures, minutes et secondes, ainsi que Z ou un décalage UTC numérique. Ce décalage est indispensable, car une heure locale seule ne désigne pas un instant unique. Par exemple, 09:30 à New York et 09:30 à Londres correspondent à deux points distincts de la chronologie. Indiquez ensuite un intervalle entier positif et choisissez la minute ou la seconde comme unité. Un intervalle de 15 minutes crée des créneaux sur des limites UTC prévisibles, tandis qu’un intervalle de 20 secondes convient aux flux d’événements plus denses. Les minutes vont de 1 à 1440 et les secondes de 1 à 86400, ce qui borne chaque demande à une journée au maximum. Les fractions de seconde sont admises dans la date-heure explicite, mais l’arrondi travaille à la seconde entière et supprime donc toute fraction. La réponse rappelle les paramètres, affiche l’instant UTC normalisé et renvoie à la fois la date-heure arrondie et son horodatage Unix entier, afin que vous puissiez choisir la représentation la mieux adaptée.
Comprenez la règle d’arrondi inférieur en UTC
L’opération convertit la date-heure fournie en un nombre entier de secondes depuis 1970-01-01T00:00:00Z. Elle convertit l’intervalle choisi en secondes, applique une division mathématique par plancher, puis remultiplie par la taille de l’intervalle. Il s’agit bien d’un arrondi inférieur, et non d’un arrondi à la limite la plus proche : 14:37:52Z ramené à 15 minutes devient 14:30:00Z, jamais 14:45:00Z. Les limites sont ancrées à l’époque Unix, ce qui lève toute ambiguïté pour les intervalles qui ne divisent pas uniformément une heure. Un intervalle de sept minutes suit ainsi des multiples consécutifs de sept minutes sur la chronologie UTC mondiale, au lieu de redémarrer selon une convention locale implicite. Le plancher mathématique est également essentiel avant 1970, puisqu’il mène à la limite antérieure au lieu de tronquer vers zéro. Les décalages numériques sont résolus avant la sélection du créneau : deux écritures équivalentes du même instant donnent donc le même résultat. L’implémentation valide directement les dates grégoriennes et les champs horaires, puis effectue la conversion civile en arithmétique entière sans appeler Date ni reprendre le fuseau du système.
Employez des créneaux stables dans vos automatismes
Une date-heure arrondie constitue une clé de créneau compacte et explicable. Les pipelines analytiques peuvent regrouper les enregistrements entrants dans des fenêtres identiques avant leur agrégation. Les caches peuvent établir des groupes d’expiration sans laisser les millisecondes ou le fuseau du client fragmenter des clés pourtant équivalentes. Les systèmes de supervision peuvent normaliser les observations à une cadence fixe, et les tests vérifier des limites exactes sans figer l’horloge système. Conservez floored_datetime lorsqu’une personne ou un journal a besoin d’une valeur UTC lisible, ou employez floored_epoch_seconds pour les comparaisons numériques et les index de base de données. Puisque le résultat dépend uniquement des trois champs d’entrée, une nouvelle tentative produit le même objet et le traitement désordonné des enregistrements ne modifie aucune réponse antérieure. Le tarif de l’API est de $0.002 par élément, tandis que l’exécuteur du navigateur réalise localement le même calcul pur. Cette capacité ne déduit aucun fuseau, ne lit pas l’heure courante, ne crée pas de créneaux mensuels civils et n’arrondit pas vers le haut. Si votre limite métier dépend d’un fuseau nommé soumis à l’heure d’été, résolvez cette règle en amont et transmettez le décalage ISO explicite obtenu.
Cas d’usage
Regrouper des événements par fenêtre de rapport
Convertissez des horodatages ISO aux décalages différents en débuts de créneaux UTC cohérents avant tout comptage ou calcul.
Créer des clés de cache déterministes
Supprimez les variations inférieures à l’intervalle afin que les demandes d’une même fenêtre partagent une clé stable.
Préparer des jeux de test exacts
Vérifiez les limites de minute ou de seconde sans employer l’horloge, les paramètres régionaux ni la base des fuseaux du système.
Questions fréquentes
Combien coûte une demande ?
Le tarif de l’API est de $0.002 par élément. L’exécuteur du navigateur réalise localement le même calcul déterministe.
Pourquoi faut-il inclure Z ou un décalage ?
Une heure dépourvue de fuseau ne désigne pas un instant unique. Un décalage explicite rend la conversion UTC déterministe.
L’arrondi vise-t-il l’intervalle le plus proche ?
Non. Il descend toujours à la limite antérieure, y compris pour les dates précédant l’époque Unix.
Que deviennent les fractions de seconde ?
Elles sont acceptées, mais la capacité travaille à la seconde entière ; les valeurs UTC renvoyées ne comportent donc aucune fraction.
Où les limites d’intervalle sont-elles ancrées ?
Ce sont des multiples exacts de l’intervalle en secondes depuis l’époque Unix, 1970-01-01T00:00:00Z.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/date/floor-to-interval \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"datetime":"2026-07-25T14:37:52Z","interval":15,"unit":"minute"}'const res = await fetch("https://api.kit.forhosting.com/date/floor-to-interval", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"datetime": "2026-07-25T14:37:52Z",
"interval": 15,
"unit": "minute"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/floor-to-interval",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"datetime": "2026-07-25T14:37:52Z",
"interval": 15,
"unit": "minute"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/floor-to-interval", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"datetime":"2026-07-25T14:37:52Z","interval":15,"unit":"minute"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"datetime":"2026-07-25T14:37:52Z","interval":15,"unit":"minute"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/floor-to-interval", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"datetime": "2026-07-25T14:37:52Z",
"interval": 15,
"unit": "minute"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.floor_to_interval",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |