<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Online Alarm Clock</title>
    <description>The latest articles on DEV Community by Online Alarm Clock (@onlinealarmclock).</description>
    <link>https://dev.to/onlinealarmclock</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3841344%2F8abf82cd-910b-4d5f-b5f9-963421894f87.png</url>
      <title>DEV Community: Online Alarm Clock</title>
      <link>https://dev.to/onlinealarmclock</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onlinealarmclock"/>
    <language>en</language>
    <item>
      <title>JavaScript ile Çoklu Zaman Dilimi (Timezone) Yönetimi: Aklınızı Kaybetmeden Dünya Saati Yapmak</title>
      <dc:creator>Online Alarm Clock</dc:creator>
      <pubDate>Fri, 03 Apr 2026 06:40:22 +0000</pubDate>
      <link>https://dev.to/onlinealarmclock/javascript-ile-coklu-zaman-dilimi-timezone-yonetimi-aklinizi-kaybetmeden-dunya-saati-yapmak-3l8k</link>
      <guid>https://dev.to/onlinealarmclock/javascript-ile-coklu-zaman-dilimi-timezone-yonetimi-aklinizi-kaybetmeden-dunya-saati-yapmak-3l8k</guid>
      <description>&lt;p&gt;Frontend geliştiriciler olarak tarih ve saat işlemleriyle uğraşmak, kariyerimizin bir noktasında mutlaka başımızı ağrıtan bir konu olmuştur. Özellikle global kullanıcıları olan bir uygulama geliştiriyorsanız veya Amerika Birleşik Devletleri gibi tek bir ülke sınırları içinde bile birden fazla saat dilimi (ve eyaletlere göre değişen yaz saati uygulaması) olan bir yapıyı kurguluyorsanız, JavaScript'in standart Date objesi genellikle yetersiz kalır.&lt;/p&gt;

&lt;p&gt;Geçtiğimiz günlerde, kullanıcıların farklı ülkelerdeki anlık saatleri takip edebileceği, tarayıcı tabanlı bir araç geliştirirken bu meşhur "Timezone" kabusuyla yüzleştim. Bu yazıda, projeyi ağırlaştıracak devasa kütüphaneler (örneğin Moment.js) yüklemeden, modern JavaScript API'leri ile bu sorunu nasıl çözdüğümü ve performansı nasıl optimize ettiğimi adım adım anlatacağım.&lt;/p&gt;

&lt;p&gt;Problem: Neden Sadece new Date() Yetmiyor?&lt;/p&gt;

&lt;p&gt;Eğer sadece kullanıcının yerel saatini göstermek isterseniz new Date() harika çalışır. Ancak kullanıcınız Türkiye'de yaşarken ona anlık olarak Amerika'nın farklı bölgelerindeki saati göstermek isterseniz işler anında karışır.&lt;/p&gt;

&lt;p&gt;Çünkü bu basit görünen işlemin arkasında şu hesaplamalar yatar:&lt;/p&gt;

&lt;p&gt;İlgili şehrin veya eyaletin UTC/GMT sapması (Offset).&lt;/p&gt;

&lt;p&gt;O eyaletin Yaz Saati Uygulamasına (DST - Daylight Saving Time) geçip geçmediği (örneğin Arizona'nın büyük bir kısmı DST uygulamazken, komşusu Utah uygular).&lt;/p&gt;

&lt;p&gt;Sunucu saati ile istemci (kullanıcı) saati arasındaki uyuşmazlıklar.&lt;/p&gt;

&lt;p&gt;Çözüm: &lt;code&gt;Intl.DateTimeFormat&lt;/code&gt; API'sinin Gücü&lt;/p&gt;

&lt;p&gt;Neyse ki modern tarayıcılar artık &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl" rel="noopener noreferrer"&gt;Internationalization API&lt;/a&gt; ile birlikte geliyor. Bu harika API, saat dilimi dönüşümlerini ve yaz saati karmaşasını bizim yerimize işletim sistemi veri tabanına (IANA timezone database) dayanarak arka planda çözüyor.&lt;/p&gt;

&lt;p&gt;İşte belirli bir zaman dilimindeki saati en doğru şekilde almak için yazdığım temel fonksiyon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * Belirtilen IANA zaman dilimine göre anlık saati döndürür.
 * @param {string} timeZone - Örn: 'America/New_York'
 * @returns {string} - Formatlanmış saat (Örn: "14:30:45")
 */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getLocalizedTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;timeZone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hour12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;// 24 saat formatı kullanmak için&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="c1"&gt;// Formatlayıcıyı oluştur ve mevcut anı (new Date) geçir&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formatter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Intl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tr-TR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;formatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Örnek Uygulama: Amerika Kıtası Saatlerini Hesaplamak&lt;/p&gt;

&lt;p&gt;Amerika, kıta içinde 4 farklı ana saat dilimi kullanıyor (Eastern, Central, Mountain ve Pacific). Yukarıdaki fonksiyonumuzu kullanarak bu bölgelerin anlık saatlerini çok rahat çekebiliriz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// New York (Doğu Zaman Dilimi - EST)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeNewYork&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLocalizedTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;America/New_York&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`New York Saati: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;timeNewYork&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Chicago / Texas (Merkez Zaman Dilimi - CST)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeChicago&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLocalizedTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;America/Chicago&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Chicago Saati: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;timeChicago&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Los Angeles (Pasifik Zaman Dilimi - PST)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeLosAngeles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLocalizedTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;America/Los_Angeles&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Los Angeles Saati: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;timeLosAngeles&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Performans İpucu: DOM'u Saniyede Bir Yormamak&lt;/p&gt;

&lt;p&gt;Eğer ekranda saniyeleri de akan canlı bir saat yapıyorsanız, ilk akla gelen çözüm setInterval ile her saniye getLocalizedTime fonksiyonunu çağırmaktır. Ancak Intl.DateTimeFormat objesini her saniye yeniden oluşturmak hafıza (memory) ve işlemci açısından maliyetlidir.&lt;/p&gt;

&lt;p&gt;Bunun yerine şu optimizasyonu kullandım:&lt;br&gt;
Sayfa yüklendiğinde Intl API'si ile net saati (saat, dakika, saniye) bir kez çekiyorum. Ardından saniyeyi basit bir JavaScript değişkeni olarak her saniye 1 artırıyorum. Sadece dakika değiştiğinde (saniye 59'dan 00'a geçerken) senkronizasyon için API'yi tekrar çağırıyorum. Bu sayede tarayıcıyı hiç yormadan akıcı bir deneyim elde ediyorum.&lt;/p&gt;

&lt;p&gt;Canlı Örnek: Bu Mantığı Nasıl Bir Ürüne Dönüştürdüm?&lt;/p&gt;

&lt;p&gt;Öğrendiğim bu yöntemleri ve performans optimizasyonlarını sadece test etmekle kalmadım; tamamen tarayıcı tabanlı çalışan, sıfır gecikmeli bir Dünya Saati aracı geliştirdim.&lt;/p&gt;

&lt;p&gt;Özellikle arama motorlarında sıkça aratılan anahtar kelimeleri hedefleyerek, kullanıcıların kafa karışıklığı yaşamadan anında cevap bulabileceği dinamik sayfalar oluşturdum. Eğer bu kodların canlıda nasıl çalıştığını, arayüzde (UI) nasıl render edildiğini incelemek isterseniz projeme göz atabilirsiniz:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tüm Amerika kıtasının saat dilimi haritası ve canlı saatleri için: &lt;a href="https://onlinealarmclock.io/tr/amerikada-saat-kac/" rel="noopener noreferrer"&gt;Amerika'da şu an saat kaç&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Doğu yakası için geliştirdiğim spesifik araç: &lt;a href="https://onlinealarmclock.io/tr/new-york-saat-kac/" rel="noopener noreferrer"&gt;New York saat kaç&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Batı yakasındaki saat farkını gösteren araç: &lt;a href="https://onlinealarmclock.io/tr/los-angeles-saat-kac/" rel="noopener noreferrer"&gt;Los Angeles saat kaç&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tarih ve saat işlemleri için dışa bağımlılığı azaltmak, uygulamanızın yüklenme süresini (bundle size) inanılmaz derecede rahatlatıyor. Siz kendi projelerinizde Timezone hesaplamaları için hangi yöntemleri veya optimizasyonları kullanıyorsunuz? Dış kütüphanelere (date-fns, dayjs vb.) hala mecbur hissediyor musunuz?&lt;/p&gt;

&lt;p&gt;Yorumlarda buluşalım!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Distraction-Free, PWA-Ready Online Alarm Clock in 2026 ⏱️</title>
      <dc:creator>Online Alarm Clock</dc:creator>
      <pubDate>Tue, 24 Mar 2026 08:43:11 +0000</pubDate>
      <link>https://dev.to/onlinealarmclock/building-a-distraction-free-pwa-ready-online-alarm-clock-in-2026-336l</link>
      <guid>https://dev.to/onlinealarmclock/building-a-distraction-free-pwa-ready-online-alarm-clock-in-2026-336l</guid>
      <description>&lt;p&gt;If you search for an "online alarm clock" or "timer" today, you'll probably land on websites that look like they were built in 2010. They are usually filled with intrusive ads, lack native dark mode, and drain your laptop battery with unoptimized scripts.&lt;/p&gt;

&lt;p&gt;As a developer, I got tired of this. I just wanted a simple tool to set my Pomodoro timers or morning alarms without going blind from an all-white screen.&lt;/p&gt;

&lt;p&gt;So, I decided to build my own solution: &lt;a href="https://onlinealarmclock.io/en/" rel="noopener noreferrer"&gt;OnlineAlarmClock.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Core Idea: Simplicity &amp;amp; Speed&lt;br&gt;
When building utility apps, the most important metric is how fast a user can complete their task. I focused on three main pillars:&lt;/p&gt;

&lt;p&gt;Native Dark Mode: A sleek, distraction-free UI that doesn't hurt your eyes, whether it's 2 PM or 2 AM.&lt;/p&gt;

&lt;p&gt;PWA Support: You can install the site as an app on your desktop or mobile device. It works smoothly in the background.&lt;/p&gt;

&lt;p&gt;Task-Specific Routing: Instead of forcing users to navigate a complex menu, I built specific URLs for common needs. For example, if you just want a quick focus session, you can directly go to the &lt;a href="https://onlinealarmclock.io/en/25-minute-timer/" rel="noopener noreferrer"&gt;25-Minute Timer&lt;/a&gt; page and it starts instantly.&lt;/p&gt;

&lt;p&gt;Tech Stack &amp;amp; Performance&lt;br&gt;
The goal was to keep the DOM incredibly light. By leveraging modern web APIs, the alarm will ring consistently even if you switch tabs. The Screen Wake Lock API ensures your device doesn't go to sleep while you are tracking your study or cooking time.&lt;/p&gt;

&lt;p&gt;I also recently submitted a Chrome Extension to make accessing the timer even faster.&lt;/p&gt;

&lt;p&gt;Feedback Welcome!&lt;br&gt;
I'm currently treating this as an open learning project and trying to optimize its performance further. If you have a minute, check out the live site and let me know how the UI feels.&lt;/p&gt;

&lt;p&gt;What features would you consider a "must-have" for a modern browser-based timer? Let's discuss in the comments!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
