Verilen tarihin gün, hafta, ay ve yıl şeklinde görünümü

public ActionResult Index()
{
    DateTime isteilenTarih = DateTime.Now;
     Date date = GetDate(isteilenTarih); //Methodu çağır
    return View();
}

public Date GetDate(DateTime currentDate)
{
    System.Globalization.CultureInfo currentCulture = new System.Globalization.CultureInfo("tr-TR");
    Date date = new Date();
    date.day = currentDate.Day;
    date.dayName = currentDate.ToString("dddd", currentCulture);

    date.week = currentCulture.Calendar.GetWeekOfYear(new DateTime(currentDate.Year, currentDate.Month, currentDate.Day), currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek);
    int delta = DayOfWeek.Monday - currentDate.DayOfWeek;
    if(delta > 0) delta -= 7;
    DateTime firstdayofweek = currentDate.AddDays(delta);
    DateTime lastdayofweek = firstdayofweek.AddDays(7);
    date.weekName = String.Format("{0:dd MMM}", firstdayofweek) + " - " + String.Format("{0:dd MMM yyyy}", lastdayofweek);

    date.month = currentDate.Month;
    date.monthName = currentDate.ToString("MMMM yyyy", currentCulture);

    date.year = currentDate.Year;
    date.yearName = currentDate.ToString("yyyy");

    return date;
}

public class Date
{
    public int day {get;set;}
    public string dayName { get; set; }
    public int week { get; set; }
    public string weekName { get; set; }
    public int month { get; set; }
    public string monthName { get; set; }
    public int year { get; set; }
    public string yearName { get; set; }
 }

Json dateTime Convert To JavaScript DateTime ( Türkçe )

Merhabalar ,

mvc içinde dateTime tipimi json ile ön yüze yazdırmam gerekti fakat bu işlemi yaptığımda Tarih bilgisinin “/ Date(1349298000000) /” bu şekilde son kullanıcının anlamayacağı şekilde bir ifade ile karşılaştım .Genel olarak mvc içinde date tipi ConvetToShorDate gibi bir bir ifade ile string e çevirdiklerini gördüm ki benim mvc tiplerimi bozacağı için bu yapıyı kullanmayı uygun görmedim.

/ Date(1349298000000) /

bu ifadenin ne olduğunu araştırdım , json ,jquery’i yapan arkadaşlar düşünmüşler taşınmışlar bir yığın farklı format olduğunu bulmuşlar ki ülkeler arası ki, kullandığımız network te bile gün ay yıl mı yıl ay gün mü  vsvs şekilde varyasyonları olduğunu bulmuşlar . Full tarihi vermek yerine Tick dediğimiz değeri bize vermişler .

Tek yapmamız gereken bunu javascript ile istediğimiz DateTime tipine çevirmek aşağıda örneğimizi  incelebilirsiz.

function ConvertTicksToDate(vl) {
vl = vl.replace("Date", "");
vl = vl.replace("/", "");
vl = vl.replace("(", "");
vl = vl.replace(")", "");
vl = vl.replace("/", "").trim();

var vlDate = new Date(parseInt(vl));
return vlDate.toLocaleDateString();
}

$("#CampaignId4").change(function () {
var formObj = $("#SmsCampaignForm_4");

$.postJSON($.action("GetCampaignInfo", "ManageController"), { jsonString: $.retunJsonString(formObj) }, function (data) {
if ($.handle(data)) {
return;
}

var result = data.Result;
$("#frm4ToplamKisiSayisi").text(result.TotalRecord);
$("#frm4AtilanSms").text(result.SendSms);
$("#frm4BaslangicTarihi").text(ConvertTicksToDate(result.CreateDate));
$("#frm4GelenCagri").text(result.InComingCall);
$("#frm4KontorSatisi").text(result.UnitSales);
});
});

son olarak
ilk ajax dan gelen tarih / Date(1349298000000) /
Javascript ile çevirmeyi yaptıkdan sonra ise tarih bilgimiz 04 Ekim 2012 Perşembe şekilde görünecektir.

buraya kadar alıntıdır,arkadaşımız gayet güzel anlatmış. Benimde bir kaç eklemem olacak aşağıdaki kodlar gibi.

http://bsenyayla.blogspot.com/2012/10/json-datetime-convert-to-javascript.html

Arkadaşımız tarih çevirme işlemini yerel bilgisayar saatine göre yapmış ve benim bilgisayarımda ingilizce windows yüklü olduğu için ve ingilizcede tarih 5 7 2013 şeklinde görünüyor. Fakat bana lazım olan ise g/a/y yani 05.07.2013 bunun için aşağıdaki fonksiyonu kullanabiliriz.

//Json Tarihi Javascript tarihe çeviriyor.
function ConvertTicksToDate(vl) {
vl = vl.replace("Date", "");
vl = vl.replace("/", "");
vl = vl.replace("(", "");
vl = vl.replace(")", "");
vl = vl.replace("/", "").trim();
var vlDate = new Date(parseInt(vl));
//vlDate.toLocaleDateString(); //Bilgisayarın tarihine göre ayarlar
return ConvertDate(vlDate);
}

//Date çevirme
function ConvertDate(inputdate) {
var date = new Date(inputdate);
var day = date.getDate();
var month = date.getMonth();
month = month + 1;
if ((String(day)).length == 1)
day = '0' + day;
if ((String(month)).length == 1)
month = '0' + month;
return [day, month, date.getFullYear()].join('.');
}

Javascript Tarih Kontrolü

Aşağıdaki fonkisyon Javascript ile tarih alanına girilen verinin tarih kontrolünü yapar. Eğer girilen geçerli bir format ise (dd.mm.yyyy) true, değilse false döndürür.

function isValidDate(s) {
    // format D(D)/M(M)/(YY)YY
    var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;
    if (dateFormat.test(s)) {
    // remove any leading zeros from date values
    s = s.replace(/0*(\d*)/gi, "$1");
    var dateArray = s.split(/[\.|\/|-]/);
    // correct month value
    dateArray[1] = dateArray[1] - 1;
    // correct year value
    if (dateArray[2].length < 4) {
    // correct year value
    dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
    }
    var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
     if (testDate.getDate() != dateArray[0] || testDate.getMonth() != dateArray[1] || testDate.getFullYear() != dateArray[2]) {
    return false;
    } else {
   return true;
   }
    } else {
    return false;
    }
}

Veritabanında int olarak tutulan saat ve tarih için çevirme

Bazı eski veri tabanlarında karşılaşmışınızdır, tarih ve saati int olarak tutulur . ve : lardan temizlenerek. Fakat web tarafında int değerleri formatlamak isteyebiliriz, gün adı vs göstermek için. Formatlamak için öncelikle verileri çevirmemiz gerekmektedir. tarihi DateTime zamanı ise TimeSpan’a çevirmeliyiz.Hemen örnek üzerinde görelim;

VeriTabanımızda int olarak tarih verimiz 20130214, saat olarak ise 163000 tutulduğunu farzedelim. Şimdi bu integer değerleri çevirecek olan methodlarımıza göz atalım.

//Tarih oluşturma methodumuz
private static DateTime DateCreate(string sdt)
{
    int year = Convert.ToInt32(sdt.Substring(0, 4));
    int month = Convert.ToInt32(sdt.Substring(4, 2));
    int day = Convert.ToInt32(sdt.Substring(6, 2));
    DateTime dt = new DateTime(year, month, day);
    return dt;
}

//Saat oluşturma methodumuz
private static TimeSpan TimeCreate(string sts)
{
    int hour = Convert.ToInt32(sts.Substring(0, 2));
    int munites = Convert.ToInt32(sts.Substring(2, 2));
    int seconds = Convert.ToInt32(sts.Substring(4, 2));
    return new TimeSpan(hour, munites, seconds);
}

//Tarih ile saati oluşturma methodumuz
private static DateTime DateTimeCreate(string sdt, TimeSpan sts)
{
    int year = Convert.ToInt32(sdt.Substring(0, 4));
    int month = Convert.ToInt32(sdt.Substring(4, 2));
    int day = Convert.ToInt32(sdt.Substring(6, 2));
    DateTime date = new DateTime(year, month, day);
    return date.Add(sts);
}

//Methodların kullanımı;
DateTime dt = DateTime(20130214);
TimeSpan ts = TimeCreate(163000)

Hepsi bu kadar…

C#, DateTime Formatları

Tarih işlemlemlerinde bazen günün adı, bazen ayın adı vs. yazdırmak isteyebiliriz, aşağıda işe yarayarak formatlar bulunmaktadır.

Format kodları açıklamaları
y (year), M (month), d (day), h (hour 12), H (hour 24), m (minute), s (second), f (second fraction), F (second fraction, trailing zeroes are trimmed),t (P.M or A.M) and z (time zone).

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);
String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",          dt);  // "5 05"            minute
String.Format("{0:s ss}",          dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone

String.Format("{0:t}", dt);  // "4:05 PM"                         ShortTime
String.Format("{0:d}", dt);  // "3/9/2008"                        ShortDate
String.Format("{0:T}", dt);  // "4:05:07 PM"                      LongTime
String.Format("{0:D}", dt);  // "Sunday, March 09, 2008"          LongDate
String.Format("{0:f}", dt);  // "Sunday, March 09, 2008 4:05 PM"  LongDate+ShortTime
String.Format("{0:F}", dt);  // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt);  // "3/9/2008 4:05 PM"                ShortDate+ShortTime
String.Format("{0:G}", dt);  // "3/9/2008 4:05:07 PM"             ShortDate+LongTime
String.Format("{0:m}", dt);  // "March 09"                        MonthDay
String.Format("{0:y}", dt);  // "March, 2008"                     YearMonth
String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"   RFC1123
String.Format("{0:s}", dt);  // "2008-03-09T16:05:07"             SortableDateTime
String.Format("{0:u}", dt);  // "2008-03-09 16:05:07Z"            UniversalSortableDateTime

// month/day numbers without/with leading zeroes
String.Format("{0:M/d/yyyy}", dt);            // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt);          // "03/09/2008"

// day/month names
String.Format("{0:ddd, MMM d, yyyy}", dt);    // "Sun, Mar 9, 2008"
String.Format("{0:dddd, MMMM d, yyyy}", dt);  // "Sunday, March 9, 2008"

// two/four digit year
String.Format("{0:MM/dd/yy}", dt);            // "03/09/08"
String.Format("{0:MM/dd/yyyy}", dt);          // "03/09/2008"

Ayrıca dile göre tarih formatları değişkenlik göstermektededir. Mesela İngilizcede ay/gün/yıl gibi fakat türkçede gün/ay/yıl şeklinde. Dile göre tarih çevirme işlemlerini aşağıdaki gibi yapabiliriz.

lb.BorrowDate = Convert.ToDateTime(txtreturndate.Text, new CultureInfo("tr-TR"));