- 1 1. Pata Muda wa Sasa katika MySQL (Hitimisho: Jalada la SQL fupi zaidi)
- 1.1 1.1 Tarehe na muda wa sasa wa MySQL: NOW() / CURRENT_TIMESTAMP
- 1.2 1.2 Tarehe ya sasa ya MySQL: CURDATE()
- 1.3 1.3 Muda wa sasa wa MySQL: CURTIME()
- 1.4 1.4 Muda wa UTC wa MySQL: UTC_TIMESTAMP()
- 1.5 1.5 Muda wa sasa wa MySQL na milisekunde: NOW(3) / CURRENT_TIMESTAMP(3)
- 1.6 1.6 Jalada la haraka kwa madhumuni
- 1.7 Muhtasari wa vizingiti vya kawaida
- 2 2. Tofauti kati ya MySQL NOW() na CURRENT_TIMESTAMP
- 3 5. Kuhesabu Tofauti za Tarehe/Saa katika MySQL (DATEDIFF / TIMESTAMPDIFF)
- 4 6. Maswali ya Mipaka ya Tarehe kwa Kutumia Wakati wa Sasa
1. Pata Muda wa Sasa katika MySQL (Hitimisho: Jalada la SQL fupi zaidi)
Ikiwa unataka kupata muda wa sasa katika MySQL, kuna tu baadhi ya kazi za SQL unazohitaji kukumbuka.
Hapo chini ni jibu fupi zaidi kwa neno la utafutaji “MySQL get current time”.
1.1 Tarehe na muda wa sasa wa MySQL: NOW() / CURRENT_TIMESTAMP
Inarudisha tarehe + muda wa sasa (YYYY-MM-DD HH:MM:SS).
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Mfano wa matokeo
2025-02-01 15:30:45
NOW()naCURRENT_TIMESTAMPkwa kawaida hurudisha matokeo sawa.- Zote hurudisha tarehe na muda wa sasa.
- Ikiwa unahitaji milisekunde, tumia yafuatayo.
SELECT NOW(3);
Vidokezo (makosa ya kawaida)
- Inategemea mipangilio ya eneo la saa la seva.
- Katika mazingira ya UTC, unaweza kupata UTC badala ya saa ya Japani.
- Wakati wa utekelezaji wa swali, kwa msingi hurudisha muda huo huo (imewekwa ndani ya tambo moja).
1.2 Tarehe ya sasa ya MySQL: CURDATE()
Inarudisha tu tarehe (bila muda).
SELECT CURDATE();
Mfano wa matokeo
2025-02-01
Matumizi
- Kuuliza data ya leo
- Ulinganisho wa tarehe (kwa mfano, chuja rekodi za leo pekee)
Vidokezo
- Thamani inayorudishwa ni aina ya
DATE. - Haifai wakati unahitaji usindikaji wa muda wa siku.
1.3 Muda wa sasa wa MySQL: CURTIME()
Inarudisha tu muda.
SELECT CURTIME();
Mfano wa matokeo
15:30:45
Matumizi
- Ukaguzi wa saa za biashara
- Mantiki ya matawi kulingana na dirisha la muda
Vidokezo
- Haina taarifa ya tarehe.
- Haiwezi kutumika kulinganisha na safu za aina ya
DATE.
1.4 Muda wa UTC wa MySQL: UTC_TIMESTAMP()
Inarudisha muda katika UTC (Coordinated Universal Time), bila kujali mipangilio ya eneo la saa la seva.
SELECT UTC_TIMESTAMP();
Mfano wa matokeo
2025-02-01 06:30:45
Wakati wa kutumia
- Huduma za kimataifa
- Miundo inayohifadhi logi katika UTC kwa uthabiti
Makosa ya kawaida
- Kuchanganya na
NOW()husababisha tofauti za muda - Ikiwa programu inadhania JST, utaona tofauti ya masaa 9
1.5 Muda wa sasa wa MySQL na milisekunde: NOW(3) / CURRENT_TIMESTAMP(3)
MySQL 5.6 na baadaye inaunga mkono sekunde za sehemu.
SELECT NOW(3);
SELECT CURRENT_TIMESTAMP(3);
Mfano wa matokeo
2025-02-01 15:30:45.123
Vidokezo vya kuhifadhi
Safu yako lazima pia iunge mkono sekunde za sehemu.
DATETIME(3)
TIMESTAMP(3)
Kama uihifadhi katika safu isiyounga mkono, sehemu ya sehemu itakatwa.
1.6 Jalada la haraka kwa madhumuni
| Purpose | SQL |
|---|---|
| Current date and time | SELECT NOW(); |
| Get UTC | SELECT UTC_TIMESTAMP(); |
| Date only | SELECT CURDATE(); |
| Time only | SELECT CURTIME(); |
| Get milliseconds | SELECT NOW(3); |
Muhtasari wa vizingiti vya kawaida
- Muda unaonekana tofauti kwa sababu hukuthibitisha eneo la saa
- Kutumia
NOW(3)bila safu inayoweza kushikilia milisekunde - Kuchanganya UTC na muda wa eneo
- Kutofahamu tofauti kati ya DATETIME na TIMESTAMP

Tofauti kati ya MySQL DATETIME na TIMESTAMP (kulinganisha ikiwa ubadilishaji wa eneo la saa unatokea)
2. Tofauti kati ya MySQL NOW() na CURRENT_TIMESTAMP
NOW() na CURRENT_TIMESTAMP zinaonekana sawa, lakini kuelewa vibaya wapi wa kuzitumia na jinsi zinavyotenda kunaweza kusababisha hitilafu. Hapa tunajumuisha tofauti, matumizi sahihi, na vizingiti vya kawaida.
2.1 Unapaswa kutumia ipi? (Matumizi ya SELECT / Matumizi ya DEFAULT)
■ Wakati wa kupata tarehe/muda wa sasa katika SELECT
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Kawaida, zote hurudisha matokeo sawa.
- Zinafanana (maneno yanayofanana)
- Thamani inayorudishwa ni sawa na
DATETIME - Inategemea mipangilio ya eneo la saa
Hitimisho la kimantiki
- Pendekeza usomaji rahisi →
NOW() - Pendekeza mtindo wa SQL wa kawaida →
CURRENT_TIMESTAMP
■ Wakati wa kuweka thamani ya chaguo-msingi ya safu
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Jambo kuu hapa ni:
Kwa thamani ya chaguo-msingi, kawaida hutumia
CURRENT_TIMESTAMP.
Baadhi ya mazingira huruhusu NOW() pia, lakini tabia inaweza kutofautiana kulingana na toleo la MySQL na hali ya SQL. Chaguo salama zaidi ni CURRENT_TIMESTAMP.
2.2 Matumizi sahihi ya DEFAULT / ON UPDATE
Kama unataka kusasisha kiotomatiki timestamp ya “updated at”:
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
Tabia
- Katika INSERT → inaweka wakati wa sasa kwa created_at / updated_at
- Katika UPDATE → husasisha updated_at pekee
Makosa ya kawaida
- Kutolingana usahihi wa sehemu ya sekunde wakati wa kutumia
DATETIME - Kukumbana na vikwazo vya MySQL vya zamani na safu nyingi za TIMESTAMP (MySQL 5.6 na mapema yalikuwa na vizuizi)
2.3 Toifauti Kati ya NOW() na SYSDATE() (Muhimu)
Jambo rahisi kupuuza ni tofauti kutoka SYSDATE().
SELECT NOW(), SYSDATE();
■ Tofauti za tabia
NOW()→ imara wakati wa kuanza kwa swaliSYSDATE()→ inarejesha wakati katika wakati huo inapoitwa
Mfano:
SELECT NOW(), SLEEP(3), NOW();
NOW() inarejesha thamani ileile.
SELECT SYSDATE(), SLEEP(3), SYSDATE();
SYSDATE() inaonyesha tofauti ya sekunde 3.
2.4 Ni ipi unapaswa kutumia?
| Function | Behavior | Recommended use |
|---|---|---|
| NOW() | Fixed within a query | Logging, consistency-focused |
| SYSDATE() | Call-time value | Precise real-time retrieval |
Kwa nini NOW() mara nyingi inapendekezwa katika mifumo ya ulimwengu halisi
- Inahifadhi uthabiti ndani ya muamala (mekaniki inayochakata tamko nyingi za SQL pamoja)
- Salama zaidi katika mazingira ya urejelezi
2.5 Uelewa usio sahihi na masuala
❌ “NOW() na CURRENT_TIMESTAMP ni sawa kabisa, kwa hivyo huna haja ya kufikiria juu yake.”
→ Tofauti zinaweza kuonekana katika difoti au tabia ya usasishaji, kulingana na mazingira.
❌ “SYSDATE() ni sahihi zaidi, kwa hivyo daima ni bora.”
→ Inaweza kusababisha matatizo katika mazingira ya urejelezi.
❌ Kutathmini kanda ya saa
SHOW VARIABLES LIKE '%time_zone%';
Kama utaitumia bila kukagua, unaweza kupata makosa ya muda.
2.6 Mazoea bora ya kiutendaji
- Utoaji wa SELECT →
NOW() - Difoti ya safu →
CURRENT_TIMESTAMP - Sasisha kiotomatiki →
ON UPDATE CURRENT_TIMESTAMP - Kuelekezwa kwa uthabiti → difoti kwa
NOW() - Ubunifu kulingana na UTC →
TIMESTAMP+ hifadhi katika UTC
- Umefomati wa Wakati wa Sasa wa MySQL (DATE_FORMAT / TIME_FORMAT)
Baada ya kupata wakati wa sasa katika MySQL, ni kawaida sana kubadilisha umefomati wa kuonyesha.
Kwa nia ya utafutaji “MySQL current time format,” function muhimu zaidi kuelewa niDATE_FORMAT().
3.1 Umefomati wa datetime ya MySQL: DATE_FORMAT(NOW(), …)
Sintaksisi ya msingi:
SELECT DATE_FORMAT(target_datetime, 'format_string');
Mfano: umefomati wakati wa sasa
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
Mfano wa pato
2025-02-01 15:30:45
Vifaa vya umefomati vinavyotumiwa sana
Specifier
Maana
Mfano
%Y
Mwaka (tarakimu 4)
2025
%m
Mwezi (tarakimu 2)
02
%d
Siku (tarakimu 2)
01
%H
Saa (saa 24)
15
%h
Saa (saa 12)
03
%i
Dakika
30
%s
Sekunde
45
%p
AM/PM
PM
3.2 Kubadilisha kuwa umefomati wa mtindo wa Kijapani au saa 12
■ Umefomati wa mtindo wa Kijapani
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
Mfano wa pato:
2025-02-01 15:30
■ Umefomati wa saa 12 + AM/PM
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
Mfano wa pato:
2025-02-01 03:30:45 PM
3.3 Umefomati wa wakati pekee wa MySQL: TIME_FORMAT()
Function ya umefomati maalum kwa data ya aina yaTIME.
SELECT TIME_FORMAT(CURTIME(), '%H:%i');
Mfano wa pato:
15:30
Masharti
TIME_FORMAT()ni kwa aina yaTIMEpekee
KwaDATETIME, tumiaDATE_FORMAT()
3.4 Kubadilisha kutoka String → datetime: STR_TO_DATE()
Ili kubadilisha data ya string kuwa aina ya datetime:
SELECT STR_TO_DATE('2025-02-01 15:30:45', '%Y-%m-%d %H:%i:%s');
Mfano wa pato:
2025-02-01 15:30:45
Makosa ya kawaida
Kutoambatana kwa umefomati kunarudisha NULL
Kuchanganya%mna%c(mwezi ulio na zero-padded dhidi ya bila zero-padded)
3.5 Mambo muhimu katika uzalishaji
❌ Usilinganishe baada ya kufomati
Mfano mbaya:
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-01';
Hii haipendekezwi kwa sababu indeksia hazifanyi kazi (utendaji wa swali hupungua).
Inayopendekezwa:
WHERE created_at >= '2025-02-01' AND created_at < '2025-02-02';
❌ Usifomati kupita kiasi upande wa DB
Katika programu za wavuti, umefomati wa kuonyesha huwa rahisi zaidi upande wa programu
Hifadhidata inapaswa kuzingatia “uhifadhi na hesabu”
3.6 Umefomati na milisekunde
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f');
%finawakilisha microseconds (tarakimu 6).
Masharti
Ikiwa safu siDATETIME(3)au sawa, sehemu ya kufikia itakatwa
Inapatikana katika MySQL 5.6 na zaidi
3.7 Muhtasari kwa kusudi la umefomati
Kusudi
Function
Badilisha umefomati wa kuonyesha
DATE_FORMAT
Fomati wakati pekee
TIME_FORMAT
Kubadilisha String → datetime
STR_TO_DATE
Onyesha milisekunde
%f - Ongezeko/Lapunguzo la Tarehe na Wakati wa MySQL (DATE_ADD / DATE_SUB)
Hata kama unaweza kupata wakati wa sasa, huwezi kuitumia kwa ufanisi katika uzalishaji bila hesabu za tarehe/wakati kama “siku X baadaye” au “saa X zilizopita.”
Hapa tunaeleza jinsi ya kutumiaDATE_ADD()naDATE_SUB()na wakati wa sasa katika MySQL.
4.1 Ongezeko la datetime ya MySQL: DATE_ADD()
Sintaksisi ya msingi:
SELECT DATE_ADD(base_datetime, INTERVAL value unit);
Mfano: siku 7 kutoka sasa
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
Mfano: saa 2 baadaye
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);
Vitu vinavyotumiwa sana
Unit
Maana
SECOND
Sekunde
MINUTE
Dakika
HOUR
Saa
DAY
Siku
MONTH
Miezi
YEAR
Maka
4.2 Lapunguzo la datetime ya MySQL: DATE_SUB()
Sintaksisi ya msingi:
SELECT DATE_SUB(base_datetime, INTERVAL value unit);
Mfano: siku 30 zilizopita
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
Mfano: saa 1 iliyopita
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);
Matumizi
Angalia mwisho
Kufuta magunia ya zamani
Kutoa data ya hivi karibuni
4.3 Mifumo ya kawaida ya uzalishaji
■ Pata data kutoka saa 24 zilizopita
SELECT * FROM logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
■ Weka tarehe ya mwisho siku 7 baadaye
INSERT INTO tasks (deadline) VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY));
4.4 Makosa ya kawaida na tahadhari
❌ Kutumia kazi kwenye safu wima
Mfano mbaya:
WHERE DATE(created_at) = CURDATE();
Hii inazima faharasa (utendaji wa maswali).
Pendekezo:
WHERE created_at >= CURDATE() AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
❌ Kupuuza majira ya saa
NOW() inategemea majira ya saa ya seva
Kama unahifadhi katika UTC, tumia UTC_TIMESTAMP() kama msingi
Mfano:
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 DAY);
❌ Vizingiti vya kuongeza mwezi
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
→ Kwa sababu ya marekebisho ya mwisho wa mwezi, tarehe inaweza kubadilika.
(Matokeo yanaweza kuwa 2025-02-28 kulingana na mazingira.)
Elewa maelezo kabla ya kutumia mahesabu yanayotokana na miezi.
4.5 Kuongeza kwa milisekunde
SELECT DATE_ADD(NOW(3), INTERVAL 500 MILLISECOND);
※ MySQL haiauni MILLISECOND moja kwa moja.
Eleza kwa microseconds:
SELECT DATE_ADD(NOW(3), INTERVAL 500000 MICROSECOND);
4.6 Mazoea bora
Sanidi kutumia NOW() au UTC_TIMESTAMP() kama msingi wako
Usitumie kazi kwenye safu wima katika kifungu cha WHERE
Elewa tabia ya kuongeza kwa mwezi
Kama unahitaji usahihi, tumia DATETIME(3) au zaidi
5. Kuhesabu Tofauti za Tarehe/Saa katika MySQL (DATEDIFF / TIMESTAMPDIFF)
Katika mifumo ya uzalishaji, kupata tu wakati wa sasa haitoshi. Mara nyingi unahitaji kuhesabu siku ngapi zimepita au masaa mangapi yanabaki.
5.1 Kuhesabu tofauti za tarehe: DATEDIFF()
DATEDIFF() huhesabu tofauti kwa siku kati ya tarehe mbili.
SELECT DATEDIFF('2025-02-10', '2025-02-01');
Matokeo
9
Mambo Muhimu
- Hurejesha tofauti katika siku pekee
- Sehemu ya muda inapuuzwa
- Matokeo yanaweza kuwa hasi
Mfano: hesabu siku tangu uundaji
SELECT DATEDIFF(NOW(), created_at)
FROM users;
5.2 Kuhesabu tofauti kwa kitengo: TIMESTAMPDIFF()
TIMESTAMPDIFF() inakuwezesha kubainisha kitengo.
SELECT TIMESTAMPDIFF(unit, start_datetime, end_datetime);
Mfano: tofauti ya masaa
SELECT TIMESTAMPDIFF(HOUR, '2025-02-01 10:00:00', '2025-02-01 15:00:00');
Matokeo
5
Vitengo vya kawaida
| Unit | Meaning |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| MONTH | Months |
| YEAR | Years |
Mfano: hesabu dakika tangu kuingia
SELECT TIMESTAMPDIFF(MINUTE, login_at, NOW())
FROM users;
5.3 Matumizi katika uzalishaji
- Ukaguzi wa muda wa kikao
- Ukaguzi wa kumalizika kwa usajili
- Kuhesabu muda uliopita katika logi
- Mantiki ya kupunguza kasi
5.4 Makosa ya kawaida
❌ Kutumia DATEDIFF wakati usahihi wa muda unahitajika
DATEDIFF() inapuuzia masaa na dakika.
❌ Kubadilisha mpangilio wa hoja
Mpangilio ni:
TIMESTAMPDIFF(unit, start, end)
Ukibadilisha, matokeo yatakuwa hasi.
❌ Kupuuza majira ya saa
Kama unachanganya UTC na saa za eneo, tofauti zinaweza kuwa zisizo sahihi.
5.5 Mazoea bora
- Tumia
TIMESTAMPDIFF()wakati usahihi wa muda una umuhimu - Tumia
DATEDIFF()kwa mahesabu rahisi ya siku - Hakikisha matumizi ya majira ya saa yanayofanana
- Sanidi kutumia UTC katika mifumo iliyogawanyika
6. Maswali ya Mipaka ya Tarehe kwa Kutumia Wakati wa Sasa
Moja ya mahitaji ya kawaida katika dunia halisi ni kupata rekodi ndani ya kipengele cha muda maalum, kama vile:
- Rekodi za leo
- Siku 7 zilizopita
- Saa 24 zilizopita
- Mwezi huu
6.1 Kupata rekodi za leo (inayofaa kwa faharasa)
SELECT *
FROM logs
WHERE created_at >= CURDATE()
AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Kwa nini hii ni sahihi
- Hakuna kazi inayotumika kwenye safu wima
- Faharasa hubaki inatumika
- Maswali ya kipengele yanayofaa
6.2 Siku 7 zilizopita
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);
6.3 Saa 24 zilizopita
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
6.4 Mwezi huu
SELECT *
FROM logs
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND created_at < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);
Katika mifumo ya uzalishaji, mara nyingi ni bora kuhesabu mipaka upande wa programu na kuipita kama vigezo.
6.5 Makosa ya kawaida ya utendaji
❌ Kutumia kazi kwenye safu zilizopangwa
WHERE DATE(created_at) = CURDATE();
Hii inazuia matumizi ya faharasa na husababisha uchunguzi kamili wa jedwali.
❌ Kutumia BETWEEN bila tahadhari
BETWEEN ni jumuishi na inaweza kusababisha matatizo ya sekunde moja kupita.
6.6 Muhtasari wa mbinu bora
- Daima tumia masharti ya safu kwa uchujaji wa tarehe
- Epuka kutumia kazi kwenye safu zilizopangwa
- Pendekeza uhifadhi wa UTC katika mifumo ya kimataifa
- Kuwa wazi kuhusu dhana za eneo la saa


