UUID v1/v6/v7 to timestamp
Paste a UUID of version 1, 6 or 7 and get the time stored inside it: 018bcfe5-6800-7000-8000-000000000000 holds 2023-11-14T22:13:20.000Z, or 1700000000000 Unix milliseconds. Nothing leaves your device. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- UUID identifier
- 018bcfe5-6800-7000-8000-000000000000
- UUID version
- 7
- Unix timestamp (milliseconds)
- 1,700,000,000,000
- ISO date and time
- 2023-11-14T22:13:20.000Z
Extract the embedded timestamp from UUID versions 1, 6, or 7 and return Unix ms plus ISO-8601.
Reading the time hidden inside a UUID
Some UUIDs carry the moment they were created inside the identifier itself. Versions 1, 6 and 7 are built this way, so a value that looks like a random string of letters and digits also records a point in time. Paste such a UUID and the tool reads that embedded time and gives it back in two forms: a count of Unix milliseconds and a readable ISO 8601 date and time in UTC. For example, the version 7 UUID 018bcfe5-6800-7000-8000-000000000000 gives 1700000000000 milliseconds, shown as 2023-11-14T22:13:20.000Z. The result also tells you which version the UUID is.
When the embedded time helps
Knowing when an identifier was created is handy when you look back through records and want a reliable answer without keeping a separate date column or a spreadsheet. The answer depends only on the UUID you enter: the same value always gives the same time, and nothing is sent over the network, because the work happens in your browser. Empty values and entries of the wrong kind are rejected straight away with a clear message instead of producing a made-up time, so look at the example first if you are unsure what to paste.
Edge cases and limits
Empty strings, wrong types, and contradictory ranges are rejected early. Civil dates without timezone are calendar dates. Embedded tables travel inside the capability folder with no network calls at runtime.
Review examples before integrating.
What you can do with it
Daily work
Get a reliable answer without a spreadsheet.
FAQ
Which UUID versions can I read?
Versions 1, 6 and 7, the UUID versions that carry an embedded time. The result also tells you which of them you pasted, along with the time it holds.
What does the result show?
The UUID version, the embedded time as Unix milliseconds and the same moment as an ISO 8601 date and time in UTC. For example, 1700000000000 milliseconds reads as 2023-11-14T22:13:20.000Z.
Does the tool send my UUID over the network?
No. The calculation runs in your browser with no network calls, so the identifiers you paste stay on your device while the time is read.
What happens if I paste an empty or wrong value?
It is rejected straight away with a clear message instead of producing a made-up time. Check that you pasted a complete UUID of version 1, 6 or 7.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/date/uuid-time \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"uuid":"018bcfe5-6800-7000-8000-000000000000"}'const res = await fetch("https://api.kit.forhosting.com/date/uuid-time", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"uuid": "018bcfe5-6800-7000-8000-000000000000"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/uuid-time",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"uuid": "018bcfe5-6800-7000-8000-000000000000"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/uuid-time", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"uuid":"018bcfe5-6800-7000-8000-000000000000"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"uuid":"018bcfe5-6800-7000-8000-000000000000"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/uuid-time", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"uuid": "018bcfe5-6800-7000-8000-000000000000"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.uuid_time",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How it works
Extract the embedded timestamp from UUID versions 1, 6, or 7 and return Unix ms plus ISO-8601. The calculation is fully deterministic and runs free in your browser with the same pure function as the API. Inputs are validated before arithmetic so bad types become clear invalid_input errors. Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values. Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values.
Inputs and outputs
Optional fields use documented defaults. Required schema fields must be present and typed. Success payloads always include the primary output fields so UI bindings stay stable. Extremely large intermediates that overflow IEEE-754 become out-of-range errors rather than nulls. Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values. Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values.
Edge cases and limits
Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values. Additional guidance covers validation order, deterministic results, browser and API parity, stable error match strings for certification, and safe handling of out-of-range floating values.
Integration use cases
Automation
Same pure function in widget and API.
Teaching
Stable golden fixtures for demos.
Technical questions
Is it free?
Yes, tier A in the browser.
Network?
No network; parse on-device.
Invalid input?
invalid_input with a clear match.
Stable?
Deterministic goldens freeze the contract.
Author?
samurai.