Hourora

แป้นพิมพ์ลัด

/
ค้นหาเมือง
H
สลับแบบ 12 / 24 ชั่วโมง
S
แสดงหรือซ่อนวินาที
T
ธีม: กลางวัน กลางคืน อัตโนมัติ
P
หยุดหรือหมุนลูกโลกต่อ
?
รายการนี้
TH

สำหรับนักพัฒนา

API เขตเวลาฟรี

เอนจินเดียวกับที่ขับเคลื่อน Hourora ในรูปแบบ JSON ธรรมดา: เวลาที่ใดก็ได้ การแปลงเวลาที่คำนึงถึงเวลาออมแสง ทุกเขตเวลา IANA และการเปลี่ยนเวลา ไม่ต้องใช้คีย์ ไม่ต้องลงทะเบียน

ภาพรวม

URL หลัก
https://hourora.app/api/v1
รูปแบบ
JSON (UTF-8) เฉพาะคำขอ GET
การยืนยันตัวตน
ไม่ต้องใช้: ไม่มีคีย์ ไม่ต้องลงทะเบียน ไม่มีคุกกี้
CORS
เปิดให้ทุก origin จึงเรียกใช้จากเบราว์เซอร์ได้
ขีดจำกัดอัตรา
120 คำขอต่อนาทีต่อไคลเอนต์
ข้อมูลเวลา
IANA tzdata 2026e คอมไพล์โดย Hourora
คำอธิบายที่เครื่องอ่านได้
เอกสาร OpenAPI 3.1

ลองใช้งานจริง

เลือกตัวอย่างหรือแก้ไขพาธ แล้วส่ง คำขอจะส่งจากเบราว์เซอร์ของคุณไปยัง API โดยตรง

การตอบกลับ

การตอบกลับจะแสดงที่นี่

Endpoint ทั้งหมด

ทุก endpoint ตอบคำขอ GET ด้วย JSON เวลาอยู่ในรูปแบบ ISO 8601 ค่าออฟเซ็ตเป็นนาทีไปทางตะวันออกของ UTC (นิวยอร์กในฤดูหนาวคือ −300) และเขียนเป็นข้อความด้วย (−05:00)

เวลาปัจจุบัน

GET/api/v1/time

เวลาปัจจุบันในเขตเวลาหรือเมือง: เวลาท้องถิ่น ออฟเซ็ต UTC ตัวย่อ เวลาออมแสง และการเปลี่ยนเวลาครั้งถัดไป หากไม่ระบุพารามิเตอร์: UTC

พารามิเตอร์

ชื่อความหมาย
tzไม่บังคับชื่อเขตเวลา IANA เช่น Europe/London รองรับชื่อแฝงอย่าง Asia/Calcutta และจะตอบด้วยชื่อปัจจุบัน
cityไม่บังคับslug ของเมืองแทน tz เช่น london (ค้นหา slug ได้ด้วย /cities)

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/time?tz=Europe/London"

ตัวอย่างการตอบกลับ

{
  "zone": "Europe/London",
  "local": "2026-10-14T01:25:13",
  "iso": "2026-10-14T01:25:13+01:00",
  "offsetMinutes": 60,
  "offset": "+01:00",
  "utcOffset": "UTC+1",
  "abbreviation": "BST",
  "dst": true,
  "city": null,
  "utc": "2026-10-14T00:25:13.749Z",
  "unixMs": 1791937513749,
  "date": "2026-10-14",
  "time": "01:25:13",
  "weekday": "Wednesday",
  "dayOfYear": 287,
  "isoWeek": 42,
  "dstObserved": true,
  "nextTransition": {
    "at": "2026-10-25T01:00:00.000Z",
    "unixMs": 1792890000000,
    "type": "dst-end",
    "fromOffsetMinutes": 60,
    "toOffsetMinutes": 0,
    "shiftMinutes": -60,
    "fromAbbreviation": "BST",
    "toAbbreviation": "GMT",
    "localBefore": "2026-10-25T02:00:00",
    "localAfter": "2026-10-25T01:00:00"
  },
  "tzdata": "2026e"
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

แปลงเวลา

GET/api/v1/convert

เวลาตามนาฬิกาในเขตเวลาหนึ่งแสดงเป็นเวลาในอีกเขตหนึ่ง แจ้งเมื่อเวลานั้นตกอยู่ในช่วงขาดหายของเวลาออมแสง (ไม่มีอยู่จริง) หรือช่วงซ้อนทับ (เกิดขึ้นสองครั้ง)

พารามิเตอร์

ชื่อความหมาย
fromจำเป็นเขตเวลา (หรือ slug ของเมือง) ที่ใช้อ่านเวลา
toจำเป็นเขตเวลา (หรือ slug ของเมือง) ที่ต้องการแสดงผล
timeไม่บังคับเวลาตามนาฬิกาในเขต from รูปแบบ YYYY-MM-DDTHH:mm (วินาทีไม่บังคับ ไม่มีออฟเซ็ต) ช่วง 1970–2060 ค่าเริ่มต้น: ขณะนี้

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/convert?from=America/New_York&to=Asia/Kolkata&time=2026-10-16T15:00"

ตัวอย่างการตอบกลับ

{
  "status": "ok",
  "requested": "2026-10-16T15:00:00",
  "utc": "2026-10-16T19:00:00.000Z",
  "unixMs": 1792177200000,
  "from": {
    "zone": "America/New_York",
    "local": "2026-10-16T15:00:00",
    "iso": "2026-10-16T15:00:00-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true
  },
  "to": {
    "zone": "Asia/Kolkata",
    "local": "2026-10-17T00:30:00",
    "iso": "2026-10-17T00:30:00+05:30",
    "offsetMinutes": 330,
    "offset": "+05:30",
    "utcOffset": "UTC+5:30",
    "abbreviation": "IST",
    "dst": false,
    "dayOffset": 1
  },
  "differenceMinutes": 570,
  "tzdata": "2026e"
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

รายการเขตเวลา

GET/api/v1/zones

ทุกเขตเวลา IANA พร้อมออฟเซ็ต UTC ปัจจุบัน ตัวย่อ สถานะเวลาออมแสง ประเทศ และเมืองหลัก

พารามิเตอร์

ชื่อความหมาย
countryไม่บังคับรหัสประเทศ ISO 3166 เช่น GB เพื่อแสดงเฉพาะประเทศนั้น

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/zones?country=GB"

ตัวอย่างการตอบกลับ

{
  "asOf": "2026-10-14T00:25:13.749Z",
  "count": 1,
  "tzdata": "2026e",
  "zones": [
    {
      "id": "Europe/London",
      "offsetMinutes": 60,
      "offset": "+01:00",
      "utcOffset": "UTC+1",
      "abbreviation": "BST",
      "dst": true,
      "countries": [
        "GB",
        "GG",
        "IM"
      ],
      "mainCity": "London"
    }
  ]
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้ รายการถูกย่อเหลือ3 รายการแรก

เขตเวลาเดียว

GET/api/v1/zones/{id}

เขตเวลา IANA หนึ่งเขต: ชื่อแฝง ประเทศและเมือง ออฟเซ็ตปัจจุบัน การเปลี่ยนเวลาครั้งถัดไป และการเปลี่ยนเวลาทุกครั้งในปีที่ระบุ

พารามิเตอร์

ชื่อความหมาย
idในพาธชื่อเขตเวลา IANA คงเครื่องหมายทับไว้หรือเข้ารหัสเป็น %2F
yearไม่บังคับปีที่ต้องการแสดงการเปลี่ยนเวลา 1970–2060 ค่าเริ่มต้น: ปีนี้

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/zones/America%2FNew_York?year=2027"

ตัวอย่างการตอบกลับ

{
  "id": "America/New_York",
  "aliases": [
    "US/Eastern"
  ],
  "countries": [
    {
      "code": "US",
      "name": "United States"
    }
  ],
  "cities": [
    {
      "slug": "new-york",
      "name": "New York"
    },
    {
      "slug": "philadelphia",
      "name": "Philadelphia"
    },
    {
      "slug": "miami",
      "name": "Miami"
    }
  ],
  "now": {
    "zone": "America/New_York",
    "local": "2026-10-13T20:25:13",
    "iso": "2026-10-13T20:25:13-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true,
    "utc": "2026-10-14T00:25:13.749Z",
    "standardOffsetMinutes": -300,
    "dstObserved": true
  },
  "nextTransition": {
    "at": "2026-11-01T06:00:00.000Z",
    "unixMs": 1793512800000,
    "type": "dst-end",
    "fromOffsetMinutes": -240,
    "toOffsetMinutes": -300,
    "shiftMinutes": -60,
    "fromAbbreviation": "EDT",
    "toAbbreviation": "EST",
    "localBefore": "2026-11-01T02:00:00",
    "localAfter": "2026-11-01T01:00:00"
  },
  "year": 2027,
  "dstObservedInYear": true,
  "transitions": [
    {
      "at": "2027-03-14T07:00:00.000Z",
      "unixMs": 1805007600000,
      "type": "dst-start",
      "fromOffsetMinutes": -300,
      "toOffsetMinutes": -240,
      "shiftMinutes": 60,
      "fromAbbreviation": "EST",
      "toAbbreviation": "EDT",
      "localBefore": "2027-03-14T02:00:00",
      "localAfter": "2027-03-14T03:00:00"
    },
    {
      "at": "2027-11-07T06:00:00.000Z",
      "unixMs": 1825567200000,
      "type": "dst-end",
      "fromOffsetMinutes": -240,
      "toOffsetMinutes": -300,
      "shiftMinutes": -60,
      "fromAbbreviation": "EDT",
      "toAbbreviation": "EST",
      "localBefore": "2027-11-07T02:00:00",
      "localAfter": "2027-11-07T01:00:00"
    }
  ],
  "tzdata": "2026e"
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้ รายการถูกย่อเหลือ3 รายการแรก

ค้นหาเมือง

GET/api/v1/cities

เมืองที่ชื่อตรงกัน เรียงจากที่ตรงที่สุดและเมืองใหญ่ที่สุดก่อน พร้อมประเทศ พิกัด และเขตเวลาของแต่ละเมือง

พารามิเตอร์

ชื่อความหมาย
qจำเป็นส่วนหนึ่งของชื่อเมือง ไม่ต้องใส่เครื่องหมายเสริมสัทอักษรก็ได้ (ไม่เกิน 80 อักขระ)
limitไม่บังคับจำนวนผลลัพธ์ 1–50 ค่าเริ่มต้น 10
countryไม่บังคับรหัสประเทศ ISO 3166 เช่น GB เพื่อแสดงเฉพาะประเทศนั้น

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/cities?q=lond&limit=3"

ตัวอย่างการตอบกลับ

{
  "query": "lond",
  "count": 3,
  "total": 7,
  "cities": [
    {
      "slug": "london",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "GB",
        "name": "United Kingdom"
      },
      "region": "Westminster",
      "zone": "Europe/London",
      "lat": 51.5,
      "lng": -0.1167,
      "population": 7994105,
      "capital": true,
      "url": "https://hourora.app/en/london"
    },
    {
      "slug": "londrina",
      "name": "Londrina",
      "asciiName": "Londrina",
      "country": {
        "code": "BR",
        "name": "Brazil"
      },
      "region": "Paraná",
      "zone": "America/Sao_Paulo",
      "lat": -23.3,
      "lng": -51.18,
      "population": 496035,
      "capital": false,
      "url": "https://hourora.app/en/londrina"
    },
    {
      "slug": "london-ontario",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "CA",
        "name": "Canada"
      },
      "region": "Ontario",
      "zone": "America/Toronto",
      "lat": 42.97,
      "lng": -81.25,
      "population": 340900,
      "capital": false,
      "url": "https://hourora.app/en/london-ontario"
    }
  ]
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

เมืองเดียว

GET/api/v1/cities/{slug}

เมืองหนึ่งเมืองตาม slug พร้อมออฟเซ็ตปัจจุบันของเขตเวลาและการเปลี่ยนเวลาครั้งถัดไป

พารามิเตอร์

ชื่อความหมาย
slugในพาธslug ของเมือง เช่น tokyo

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/cities/tokyo"

ตัวอย่างการตอบกลับ

{
  "slug": "tokyo",
  "name": "Tokyo",
  "asciiName": "Tokyo",
  "country": {
    "code": "JP",
    "name": "Japan"
  },
  "region": "Tokyo",
  "zone": "Asia/Tokyo",
  "lat": 35.685,
  "lng": 139.7514,
  "population": 22006300,
  "capital": true,
  "url": "https://hourora.app/en/tokyo",
  "now": {
    "zone": "Asia/Tokyo",
    "local": "2026-10-14T09:25:13",
    "iso": "2026-10-14T09:25:13+09:00",
    "offsetMinutes": 540,
    "offset": "+09:00",
    "utcOffset": "UTC+9",
    "abbreviation": "JST",
    "dst": false,
    "utc": "2026-10-14T00:25:13.749Z"
  },
  "nextTransition": null,
  "tzdata": "2026e"
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

พิกัดเป็นเขตเวลา

GET/api/v1/lookup

เมืองในรายการที่ใกล้ละติจูดและลองจิจูดที่ระบุที่สุด และเขตเวลาของเมืองนั้น เป็นค่าประมาณ: ไม่ได้จำลองเส้นแบ่งเขตเวลา

พารามิเตอร์

ชื่อความหมาย
latจำเป็นละติจูดเป็นองศาทศนิยม −90 ถึง 90
lngจำเป็นลองจิจูดเป็นองศาทศนิยม −180 ถึง 180

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/lookup?lat=48.85&lng=2.35"

ตัวอย่างการตอบกลับ

{
  "query": {
    "lat": 48.85,
    "lng": 2.35
  },
  "approximate": true,
  "method": "nearest listed city (great-circle distance); time-zone borders are not modelled",
  "distanceKm": 2.2,
  "city": {
    "slug": "paris",
    "name": "Paris",
    "asciiName": "Paris",
    "country": {
      "code": "FR",
      "name": "France"
    },
    "region": "Île-de-France",
    "zone": "Europe/Paris",
    "lat": 48.8667,
    "lng": 2.3333,
    "population": 4957589,
    "capital": true,
    "url": "https://hourora.app/en/paris"
  },
  "zone": "Europe/Paris",
  "now": {
    "zone": "Europe/Paris",
    "local": "2026-10-14T02:25:13",
    "iso": "2026-10-14T02:25:13+02:00",
    "offsetMinutes": 120,
    "offset": "+02:00",
    "utcOffset": "UTC+2",
    "abbreviation": "CEST",
    "dst": true,
    "utc": "2026-10-14T00:25:13.749Z"
  },
  "tzdata": "2026e"
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

เวอร์ชันข้อมูล

GET/api/v1/tzdata

คำตอบมาจากฐานข้อมูลเขตเวลา IANA รุ่นใด และ Hourora อัปเดตข้อมูลล่าสุดเมื่อใด

พารามิเตอร์

ไม่มีพารามิเตอร์

ตัวอย่างคำขอ

curl "https://hourora.app/api/v1/tzdata"

ตัวอย่างการตอบกลับ

{
  "version": "2026e",
  "source": "IANA Time Zone Database",
  "sourceUrl": "https://www.iana.org/time-zones",
  "dataDate": "2026-10-13",
  "range": {
    "from": "1970-01-01",
    "to": "2060-12-31"
  },
  "zones": 344,
  "links": 253,
  "cities": 7269,
  "note": "Outside the compiled range, offsets fall back to the server runtime's own tzdata."
}

การตอบกลับจริงจากเซิร์ฟเวอร์นี้

ข้อผิดพลาด

ข้อผิดพลาดก็เป็น JSON เช่นกัน: สถานะ HTTP รหัสคงที่สำหรับโปรแกรมของคุณ และข้อความสำหรับผู้อ่าน

{
  "error": {
    "code": "unknown_zone",
    "message": "\"Mars/Base\" is not an IANA time zone name. List them with /api/v1/zones."
  }
}
สถานะรหัสเมื่อใด
400missing_parameter, invalid_parameterพารามิเตอร์ขาดหายหรือไม่อยู่ในรูปแบบที่กำหนด
404unknown_zone, unknown_city, unknown_country, not_foundไม่พบเขตเวลา เมือง ประเทศ หรือ endpoint ดังกล่าว
429rate_limitedไคลเอนต์ของคุณส่งคำขอมากเกินไป โปรดรอตามจำนวนวินาทีใน Retry-After
500internal_errorเกิดข้อผิดพลาดฝั่งเรา โปรดลองอีกครั้งในภายหลัง

วิธีการทำงาน

ขีดจำกัดและการแคช

แต่ละไคลเอนต์ส่งคำขอได้สูงสุด 120 คำขอต่อนาที โดยอนุญาตให้ส่งถี่ได้ในช่วงสั้น ๆ หากเกินกว่านั้น API จะตอบ 429 พร้อมเฮดเดอร์ Retry-After ขีดจำกัดนี้มีไว้ปกป้องบริการฟรี หากต้องการมากกว่านี้ โปรดใช้แคช

ทุกการตอบกลับระบุว่าแคชได้นานเท่าใด (Cache-Control) เวลาปัจจุบันไม่ถูกแคชเลย รายการเขตเวลา รายละเอียดเมือง และการค้นหาจากพิกัดแคชได้ห้านาที การค้นหาเมืองและการแปลงเวลาที่ระบุแคชได้หนึ่งวัน

กำลังสร้างนาฬิกาอยู่ใช่ไหม ดึงค่าออฟเซ็ตครั้งเดียว ให้นาฬิกาเดินในเครื่อง แล้วดึงใหม่หลังการเปลี่ยนเวลาครั้งถัดไปที่การตอบกลับแจ้งไว้ ไม่จำเป็นต้องเรียกทุกวินาที

คำตอบมาจากไหน

ออฟเซ็ต ตัวย่อ และการเปลี่ยนเวลามาจากสำเนาฐานข้อมูลเขตเวลา IANA ที่ Hourora คอมไพล์เอง รุ่น 2026e สำหรับปี 1970–2060 นอกช่วงนั้นจะใช้ข้อมูลในตัวของเซิร์ฟเวอร์ ซึ่งอาจเก่ากว่า

การแปลงเวลาจัดการขอบของเวลาออมแสงอย่างชัดเจน: เวลาที่ถูกข้ามไปเมื่อเลื่อนนาฬิกาไปข้างหน้าจะรายงานเป็นช่วงขาดหาย และเวลาที่เกิดขึ้นสองครั้งเมื่อเลื่อนนาฬิกาถอยหลังจะรายงานเป็นช่วงซ้อนทับ พร้อมทั้งสองช่วงขณะ

การค้นหาจากพิกัดจะคืนเมืองที่ใกล้ที่สุดจากเมืองในรายการราว 7,200 เมือง และเขตเวลาของเมืองนั้น บริเวณใกล้พรมแดน กลางทะเล หรือในพื้นที่ที่มีประชากรเบาบาง ผลอาจต่างจากเขตเวลาที่ใช้จริง ณ จุดนั้น

ข้อกำหนดการใช้งาน

คำถาม

ข้อควรรู้

API ของ Hourora ฟรีจริงหรือไม่

ฟรีจริง ไม่มีคีย์ ไม่มีบัญชี และไม่มีแพ็กเกจแบบเสียเงิน ขีดจำกัดอัตราต่อไคลเอนต์ช่วยให้บริการเป็นธรรมสำหรับทุกคน

เรียกใช้จาก JavaScript ในเบราว์เซอร์ได้หรือไม่

ได้ ทุก endpoint อนุญาตคำขอข้ามต้นทางจากทุกเว็บไซต์ (CORS) และไม่ต้องใช้ข้อมูลรับรอง

API จัดการเวลาออมแสงอย่างไร

แต่ละคำตอบคำนวณสำหรับช่วงขณะที่แน่นอนตามกฎของ IANA endpoint convert ยังแจ้งด้วยว่าเวลาที่ขอนั้นไม่มีอยู่จริง (เมื่อเลื่อนนาฬิกาไปข้างหน้า) หรือเกิดขึ้นสองครั้ง (เมื่อเลื่อนนาฬิกาถอยหลัง)

การค้นหาจากพิกัดแม่นยำแค่ไหน

ระบบจะคืนเขตเวลาของเมืองในรายการที่ใกล้ที่สุด ซึ่งถูกต้องในเกือบทุกที่ที่มีผู้คนอาศัยอยู่ ระบบไม่ได้จำลองเส้นแบ่งเขตเวลา จึงอาจผิดพลาดใกล้พรมแดนหรือกลางทะเล