lostyazilim
tr.link

Tarih ve saat formatı nasıl olmalı

10 Mesajlar 1.081 Okunma
acebozum
tr.link

cageboy cageboy WM Aracı Kullanıcı
  • Üyelik 27.03.2017
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad O** G**
  • Mesajlar 174
  • Beğeniler 6 / 4
  • Ticaret 0, (%0)
merhabalar,

veritabanına tarih ve saati kayıt ediyorum tablo biçimi varchar
tablo biçimini datetime felan yaptım kayıtda hata verdi
tarih verilerini nasıl kayıt edersem daha sağlıklı olur
 

 

wmaraci
reklam

SancarSaran SancarSaran WM Aracı Kullanıcı
  • Üyelik 14.01.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Programcı
  • Konum İzmir
  • Ad Soyad S** S**
  • Mesajlar 319
  • Beğeniler 4 / 111
  • Ticaret 0, (%0)
Tarih bilgilerini sql de integer olarak kaydetmek en iyisi. int(11).

unix time stamp olarak kayıt edersen istediğin her şekilde kullanırsın, veri tabanında çok yer kaplamaz, iki tarih arası işlem yaparken performansı yüksek olur.

unix time stamp 1 ocak 1970 ten itibaren şu ana kadar geçen saniyeyi belirten bir değerdir. Her saniye artar. time() fonksiyonu ile o andaki time_stamp ı alabilirsın.

string olarak gönderdiğin (19.01.2018) değerini strtotime ile int e çevirebilir int olarak sağladığın değeri date(d.m.Y,$time) olarak okunabilir hale getirebilirsin.
VipTema

kişi bu mesajı beğendi.

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 820
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)
O kısmı iyi düşünmek lazım, ihtiyaç nedir? Ne için kullanılacak? Ne kadar lazım?

Eğer basit bir tarih verisi istiyorsan, örneğin blog için düşünecek olursak yazılma tarihi yıl ay gün şeklinde yeterlidir, biraz daha derine ineyim saat dk sn de ekleyeyim dersen varchar veta date işini görecektir.

Esasen date SQL sorgularında kıyaslama yapmanı kolaylaştırır, şu iki tarih aralığında ara veya son şu kadar tarih içindeki verileri getir derken SQL motorundan yararlanacaksın, php tarafında sadece verileri okuman yeterli olacak.

Bana göre biraz daha detaylı işlerde en sağlıklı kayıt biçimi tarihi bütünsel olarak ele alabileceğim bir veridir, yani geriye dönük işlemleri gelecekte daha iyi yorumlayabileceğim şekilde olmalı. Fotoğrafların raw halini düşünebilirsin, getdate() fonksiyonu ile her şeyi çekebilirim. Sonra array şeklinde dönen içeriği json_encode() ile encode edip veritabanında text olarak kaydederim.

json_encode(getdate())

Bu sayede farklı tarih yorumları için farklı sütunlar açamadan json içinde bütün işimi görürüm. PHP tarafında küçük fonksiyonlarla tarih verisini istediğim gibi biçimlendirmem mümkün, tabi bu kısımlar işin angarya kısmı oluyor ama esnek tarih verisi gerekliyse bence değer.

function getFullDateFromJSON($jsonvalue){
$datearr = json_decode($jsonvalue);
return date('Y-m-d H:i:s', strtotime($datearr->year.'-'.$datearr->mon.'-'.$datearr->mday.' '.$datearr->hours.':'.$datearr->minutes.':'.$datearr->seconds));
}


Esnek tarih verisi ne işime yarayacak?

Admin ve kullanıcı panelinde kullanıyorum genelde, 27 Şubat 2018'de Saat 12:12'de şu ticket açıldı, son kayıt 29 Şubat 2018 Çarşamba 12:12 AM, 44 dk önce, 4 yıl 3 ay 2 hafta önce vesair şeklinde yeniden biçimlendirebiliyorum.
 

 

no time for caution

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 820
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)

SancarSaran adlı üyeden alıntı

Tarih bilgilerini sql de integer olarak kaydetmek en iyisi. int(11).

unix time stamp olarak kayıt edersen istediğin her şekilde kullanırsın, veri tabanında çok yer kaplamaz, iki tarih arası işlem yaparken performansı yüksek olur.

unix time stamp 1 ocak 1970 ten itibaren şu ana kadar geçen saniyeyi belirten bir değerdir. Her saniye artar. time() fonksiyonu ile o andaki time_stamp ı alabilirsın.

string olarak gönderdiğin (19.01.2018) değerini strtotime ile int e çevirebilir int olarak sağladığın değeri date(d.m.Y,$time) olarak okunabilir hale getirebilirsin.


Double desen anlarımda int deyince tarihi biçimsiz kaydedersen anca yer, 2018.12.12 12:12:12 tarihini int olarak 20181212121212 şeklinde kaydetsen bile 11 yetmiyor :) Tabi saat dk sn gerekli ise.
onurkaplan

kişi bu mesajı beğendi.

no time for caution
wmaraci
wmaraci

onurkaplan onurkaplan Bilgi Paylaştıkça Çoğalır Kullanıcı
  • Üyelik 18.06.2015
  • Yaş/Cinsiyet 37 / E
  • Meslek Senior Email Marketing Special
  • Konum İstanbul Avrupa
  • Ad Soyad O** K**
  • Mesajlar 2209
  • Beğeniler 100 / 548
  • Ticaret 4, (%100)
Hedefleme yapacaksanız datetime yapmanız lazım yani yıl ay gün şeklinde yok hedefleme olmayacak ise varchar işini görür
 

 

SancarSaran SancarSaran WM Aracı Kullanıcı
  • Üyelik 14.01.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Programcı
  • Konum İzmir
  • Ad Soyad S** S**
  • Mesajlar 319
  • Beğeniler 4 / 111
  • Ticaret 0, (%0)
Tabi neden olmasın ki, base64 encode etsekte olur yani. maksat fonksiyon kullanmak olsun.

Diyelimki 20 plasiyerimiz var. her gün bir güzergah ta satış yapıyorlar. Ben bu arkadaşların satışlarını aylık olarak seçip gün gün tek karşılaştırmak istiyorum. 30 bin satır datayı işleyeceğim.

Şimdi benim dediğime göre database den 4 byte veriyi çekmek var veya senin dediğine göre 30 bin tane json_decode çalıştıracağım.

Yaptığın işin esnek bir tarafı yok. Kendi ayağına dolanıyorsun.

unix_timestamp şu anın tüm zaman verisini timezone olmadan tutar.

yani
echo date('d.m.Y H:i:s',time());

işte sen o time() ı int olarak sql de tutuyorsun. Çok merak ettim. json ile paketlediğin zaman verisini nasıl ayrıabiliyorsun.

Yani geçen hafta kaç kere login olmuş bu user desem, o kullanıcının tüm verisini çekip sonra json decode edip sonra gerekli zamanları bulup kalanları ayırmak mı daha kolay

$baslangıç = strtotime('01.01.2018');
$baslangıç = strtotime('07.01.2018');

select count(id) where user_id = 1 and time_recod >= $baslangıç and time_record <= $bitiş;

gibi bir şey mi daha kolay.


Unutma programcılıkta basit zordur.
 

 

cageboy cageboy WM Aracı Kullanıcı
  • Üyelik 27.03.2017
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad O** G**
  • Mesajlar 174
  • Beğeniler 6 / 4
  • Ticaret 0, (%0)
SancarSaran

Sizin dediğiniz daha mantıklı time_stamp ile o anın değerini alıp istediğim gibi tüm verileri çekebidim öyle json encode edip sonra decode ile dönüştürmek biraz uğraştırır

Şimdi yapacağım sistemde ürün elbise modeli var bu ürün bir cok aşamada geçiyor bir hayli
bende bu aşamaların tarihini veritabanında date adında tablo açıp model id sine göre aşamalara
o anın tarih değerlerini ekliyorum sizce böyle devam etmelimiyim bu mantıkla başka bir yol daha mı iyi olur bu tarih verilerini kayıt etmem için
 

 

SancarSaran SancarSaran WM Aracı Kullanıcı
  • Üyelik 14.01.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Programcı
  • Konum İzmir
  • Ad Soyad S** S**
  • Mesajlar 319
  • Beğeniler 4 / 111
  • Ticaret 0, (%0)
Nerede nasıl kullanıcağına göre değişir. Kaç aşama var ? Kaç ürün var. bu tarih verilerini ilerde nasıl kullanacaksın ? Saat içeriyormu sadece gün mü ? vb
 

 

cageboy cageboy WM Aracı Kullanıcı
  • Üyelik 27.03.2017
  • Yaş/Cinsiyet 28 / E
  • Meslek öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad O** G**
  • Mesajlar 174
  • Beğeniler 6 / 4
  • Ticaret 0, (%0)
SancarSaran

her ürün için yaklaşık 30 aşama var, ürün adeti sürekli artıyor şuan 50 tane var, tarih verilerini ilerde nezaman geldi, 2 hafta önce yklendi, bir hafta boyunca yapılan aşamaları sıralamak vb. şeilde kullanıcam tarih ve saat içericek mutlaka
 

 

SancarSaran SancarSaran WM Aracı Kullanıcı
  • Üyelik 14.01.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Programcı
  • Konum İzmir
  • Ad Soyad S** S**
  • Mesajlar 319
  • Beğeniler 4 / 111
  • Ticaret 0, (%0)
O zaman yaptığın en doğrusu. id, elbise_id, islem, islem_zamani gibi bir şey işini görür.

id elbise_id ve isleme index verirsin olabildiği kadar hızlı olur artık bundan sonrası senin sql bilgine kalmış.
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al