JavaScript tarihi nasıl biçimlendirilir


2220

JavaScript'te, bir tarih nesnesini yazdırılacak şekilde nasıl biçimlendirebilirim 10-Aug-2010?


204
Her zamanki gibi: AYIN SIFIR İNDEKSİYONLU olduğuna dikkat edin! Ocak Ocak sıfır değil ...
Christophe Roussy

12
Ayrıca sakının, myDate.getDay()haftanın gününü döndürmez, ancak hafta ile ilgili hafta içi konumu . geçerli haftanın gününümyDate.getDate() döndürür .
Jimenemex

3
Javascript'teki DateTimes'ı biçimlendirmek için Intl.DateTimeFormatnesneyi kullanın . Bunu yazımda açıklıyorum: Post . Intl.DateTimeFormat Check Online
Iman Bahrampour

5
KullanabilirsiniztoLocaleDateString
onmyway133

12
URL'yi standart bir nesne olarak almak çok uzun sürdü, burada bir sorgu param anahtarı koparabilir, protokolü alabilir, üst düzey etki alanını alabilir vb. ES6 ES7 yapabilirler, ancak yine de standart bir tarih koyamazlar. 2019'da zaman formatlayıcı / ayrıştırıcı? Sanki "hmmm evet ... javascript kullanarak yeryüzünde düzenli olarak zaman ve tarihlerle başa
çıkmaya ihtiyaç duyacaklar sanki

Yanıtlar:


1287

Özel olarak sınırlandırılmış tarih biçimleri için, tarih (veya saat) bileşenlerini bir DateTimeFormatnesneden ( ECMAScript Uluslararasılaştırma API'sının parçası olan ) çıkarmanız ve ardından istediğiniz sınırlayıcılarla el ile bir dize oluşturmanız gerekir.

Bunu yapmak için şunları kullanabilirsiniz DateTimeFormat#formatToParts:

const date = new Date('2010-08-05')
const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' }) 
const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat .formatToParts(date ) 

console.log(`${day}-${month}-${year }`)
console.log(`${day}👠${month}👢${year}`) // just for fun

Ayrıca DateTimeFormatkullanarak tek tek bölümlerini de çıkarabilirsiniz DateTimeFormat#format, ancak bu yöntemi kullanırken, Mart 2020'den itibaren dakikalar ve saniyeler içinde önde gelen sıfırlar söz konusu olduğunda ECMAScript uygulamasında bir hata olduğunu unutmayın (bu hata yukarıdaki yaklaşım tarafından atlanmıştır).

const d = new Date('2010-08-05')
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)

console.log(`${da}-${mo}-${ye}`)

Tarihler ve saatler ile çalışırken , alanın birçok gizli karmaşıklığı nedeniyle genellikle bir kütüphane (örn. Moment.js , luxon ) kullanmaya değer .

Yukarıdaki çözümlerde kullanılan ECMAScript Uluslararasılaştırma API'sının IE10'da desteklenmediğini unutmayın ( Şubat 2020'de % 0,03 global tarayıcı pazar payı).


369
Bunun yerine Moment.js veya Date.js gibi bir kitaplık kullanmayı düşünün. Bu sorun defalarca çözüldü.
Benjamin Oakes

241
Neden bunu yapmak için Datenesneye bir fonksiyon eklemiyorlar?
Nayan

68
Önemli bir nokta, getMonth () yönteminin 0 tabanlı bir ay endeksi döndürmesi, örneğin Ocak 0 Şubat dönecek, 1 dönecektir, vb ...
Marko

628
moment.js 2.9.0, 11.6k gziptir , bu örnek 211 bayt gziptir .
mrzmyr

26
Hiçbir zaman, asla, document.write () kullanmamalısınız. Büyük güvenlik ve performans sorunları.
Matt Jensen

2006

Biçimlendirme üzerinde şu anda kabul edilen yanıttan biraz daha az kontrole ihtiyacınız varsa, Date#toLocaleDateStringstandart yerel ayara özgü oluşturma işlemleri oluşturmak için kullanılabilir. localeVe optionsargümanlar uygulamaları olan biçimlendirme kuralları kullanılmalıdır dili belirtin ve render bazı özelleştirme izin verelim.

Seçenekler anahtar örnekleri:

  1. gün:
    Günün temsili.
    Olası değerler "sayısal", "2 basamaklı" dır.
  2. weekday: Haftanın gününün
    temsili.
    Olası değerler "dar", "kısa", "uzun" tur.
  3. yıl:
    Yılın temsili.
    Olası değerler "sayısal", "2 basamaklı" dır.
  4. month: Ayın
    temsili.
    Olası değerler "sayısal", "2 basamaklı", "dar", "kısa", "uzun" tur.
  5. saat:
    Saatin gösterimi.
    Olası değerler "sayısal", "2 basamaklı" dır.
  6. dakika: Dakika temsili.
    Olası değerler "sayısal", "2 basamaklı" dır.
  7. İkincisi: İkincisinin
    temsili.
    Olası değerler "sayısal", 2 basamaklı "dır.

Tüm bu tuşlar isteğe bağlıdır. Seçenek değerlerinin sayısını gereksinimlerinize göre değiştirebilirsiniz; bu aynı zamanda her tarih zaman aralığının varlığını da yansıtır.

Not: Yalnızca içerik seçeneklerini yapılandırmak, ancak yine de geçerli yerel ayarı kullanmak istiyorsanız null, ilk parametrenin iletilmesi hataya neden olur. undefinedBunun yerine kullanın .

Farklı diller için:

  1. "en-US": İngilizce için
  2. "hi-IN": Hintçe için
  3. "ja-JP": Japonca için

Daha fazla dil seçeneği kullanabilirsiniz.

Örneğin

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

toLocaleString()Yöntemi aynı amaç için de kullanabilirsiniz . Tek fark, bu fonksiyonun herhangi bir seçeneği geçmediğiniz zamanı sağlar.

// Example
9/17/2016, 1:21:34 PM

Referanslar:


45
Neredeyse moment.jsbasit bir format için kullanmak üzereydi . Neyse ki ekstra bir google araması yaptı ve bunu yapan yerel API var. Harici bir bağımlılık kaydedildi. Müthiş!
LeOn - Han Li

21
Bu cevap en iyi "güncel" cevap gibi görünüyor. Ayrıca 12 saat ve 24 saat biçimini kullanmak için "hour12: true" seçeneğini de kullandı. Belki cevaptaki özet listenize eklenmelidir.
Doug Knudsen

14
Bu cevapta upvotes alamadım. Söz konusu sorunu çözmez. (yani bana 10 Ağustos 2010 gibi bir tarih verin). ToLocaleDateString () yöntemini kullanmak oldukça zordur. Date.format kütüphanesi daha iyi bir çözüm gibi görünüyor (en azından Düğüm kullanıcıları için)
Iarwa1n

3
Geçen Eğer undefinedparametre hissettiğini keyfi ilk yerel ayar olarak, bunun yerine değer iletebilirsiniz "default"MDN docs başına, tarayıcının yerel ayarları kullanmak developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
wbharding

3
@ Iarwa1n Bu yanıttan bahsetmedi, ancak toLocaleDateString işlevini kullanarak yalnızca daha sonra istediğiniz şekilde katılabileceğiniz belirli bölümleri geri alabilirsiniz. Cevabımı aşağıdan kontrol edin. date.toLocaleDateString("en-US", { day: 'numeric' }) + "-"+ date.toLocaleDateString("en-US", { month: 'short' }) + "-" + date.toLocaleDateString("en-US", { year: 'numeric' })vermek gerekir16-Nov-2019
K Vij

609

Date.format kütüphanesini kullanın :

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

İadeler:

Saturday, June 9th, 2007, 5:46:21 PM 

npm'de tarih biçimi

http://jsfiddle.net/phZr7/1/


4
bu daha uzun bir çözüm gibi görünebilir, ancak tarihleri ​​kullanan bir sitede sıkıştırılmış ve kullanılmış bir parça daha iyi bir çözüm olacaktır!
RobertPitt

5
Bu çözüm ayrıca bir npm paketi olarak da mevcuttur: npmjs.com/package/dateformat
David

19
Yukarıdaki eklenti ile ilgili 14 açık sorun var. Hatta bir tane buldum :(
Amit Kumar Gupta

6
Anladımrequire is not defined
Hooli

16
OP JS çözümü istedi
Luke Pring

523

Tarihinizi düz JavaScript kullanarak hızlı bir şekilde biçimlendirmeniz gerekiyorsa getDate,getMonth + 1 , getFullYear, getHoursve getMinutes:

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

Veya sıfırlarla doldurulmasına ihtiyacınız varsa:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50

23 Mart 2018 Pazartesi gibi formatı nasıl alacağınızı söyleyebilir misiniz?
Sachin HR

@SachinHR, önceki cevaba bakınız: stackoverflow.com/a/34015511/4161032 . toLocaleDateString()Lokalize ay / gün adlarını kullanarak tarih biçimlendirebilirsiniz.
sebastian.i

12
ayrıca sıfırları .toString().padStart(2, '0')
doldurabilirsiniz

1
@DmitryoN, gerekirse yıl aynı şekilde doldurulabilir:("000" + d.getFullYear()).slice(-4)
sebastian.i

4
@BennyJobigan Sadece String.padStart()ECMAScript 2017'den edinilebilir.
JHH

413

Peki, bugünün tarihini 2012-06-23 gibi bir MySQL dostu tarih dizesine dönüştürmek ve bu dizeyi sorgularımdan birinde parametre olarak kullanmak istedim. Bulduğum basit çözüm şudur:

var today = new Date().toISOString().slice(0, 10);

Yukarıdaki çözüm olmadığını unutmayın değil saat dilimi ofset dikkate almak.

Bunun yerine bu işlevi kullanmayı düşünebilirsiniz:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Bu, günün başında / sonunda bu kodu yürütmeniz durumunda size doğru tarihi verecektir.


9
Yapabileceğin new Date(date + " UTC")dilimini kandırmak için ve setMinutes çizgi ortadan kaldırabilir. Adam, javascript kirli
Vajk Hermecz

23
Y10K uyumlu sürüm: var today = new Date().toISOString().slice(0,-14):)
Alex Shaffer

22
Ya da böylenew Date().toISOString().split('T')[0]
rofrol

4
new Date().toISOString().slice(0, 16).replace('T',' ')eklemek için zaman
Gerrie van Wyk

3
Sadece zaman dilimi eksikliği "günün başında / sonunda" bazı küçük rahatsızlık olmadığını yorum. Örneğin Avustralya'da tarih sabah 11'e kadar yanlış olabilir - neredeyse günün yarısı!
Steve Bennett

230

Özel biçimlendirme işlevi:

Sabit formatlar için basit bir işlev işi yapar. Aşağıdaki örnek uluslararası YYYY-AA-GG biçimini oluşturur:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1; //Month from 0 to 11
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

OP formatı aşağıdaki gibi oluşturulabilir:

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Not: Bununla birlikte, JavaScript standart kitaplıklarını genişletmek genellikle iyi bir fikir değildir (örneğin, bu işlevi Tarih prototipine ekleyerek).

Daha gelişmiş bir işlev, format parametresini temel alarak yapılandırılabilir çıktı oluşturabilir.

Biçimlendirme işlevi yazmak çok uzunsa, çevresinde çok sayıda kitaplık vardır. Bazı cevaplar zaten onları numaralandırıyor. Ancak artan bağımlılıklar da buna ters düşmektedir.

Standart ECMAScript formatlama fonksiyonları:

ECMAScript'in daha yeni sürümlerinden bu yana, Datesınıfın bazı belirli biçimlendirme işlevleri vardır:

toDateString : Uygulamaya bağımlıdır, yalnızca tarihi gösterir.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString : ISO 8601 tarih ve saatini göster.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON : JSON için stringifier.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString : Uygulamaya bağlı, yerel ayar biçimindeki bir tarih.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString : Uygulamaya bağlı, yerel ayar biçiminde bir tarih ve saat.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString : Uygulamaya bağlı, yerel ayar biçiminde bir zaman.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString : Tarih için Genel toString.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Not: Bu formatlamadan özel çıktı oluşturmak mümkündür>

new Date().toISOString().slice(0,10); //return YYYY-MM-DD

Snippet'lere örnekler:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));


3
Sonuncunuz için teşekkürler .. HTML Tarih girişlerinin tarih değerini ayarlamak için kullanışlıdır.
daCoda

new Date().toLocaleDateString()Eğer verir mm/dd/yyyydeğil dd/mm/yyyybirinin Doğru lütfen.
Aarvy

1
@RajanVerma: toLocaleDateString, ABD'de olduğunuz için muhtemelen mm / dd / yyyy olan yerel ayarınızı sağlar. Burada, tarih için yerel ayar gg / aa / yyyy şeklindedir (tam olarak "yerel ayar" ın noktasıdır). "Örneğin" yazdım çünkü bu şartname değil, çıktı örneği.
Adrian Maire

177

Eğer varsa zaten jQuery UI kullanarak projenizde size bu şekilde yapabiliriz:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Oynamak için bazı tarih seçici tarih biçimi seçenekleri burada mevcuttur .


13
Dediğim gibi - jQueryUI zaten projede kullanılıyorsa - neden datepicker tarih biçimlendirme işlevini yeniden kullanmıyorsunuz? Hey millet, cevabımda neden olumsuz oy kullandığımı anlamıyorum. Lütfen açıkla.
Dmitry Pavlov

7
Birisi sadece tarih formatı işlevi için jQuery UI ekleyebilir veya tarih seçici kütüphanenin isteğe bağlı bir parçası olduğu için olabilir, ancak muhtemelen jQuery'den nefret etmek moda olabilir.
sennett

12
Birisinin yanlışlıkla ya da duygusuzca yapabileceği tüm garip kararlardan tamamen kaçınmanın mümkün olduğunu düşünmüyorum.
Dmitry Pavlov

7
@sennett: JQuery'den nefret moda mı? Yani pantolonunun bacaklarının yarısında dolaştığını düşünüyorum, sanırım ... jQuery olmadan kodlamaya çalışmak JavaScript tarihinin çoğunda olduğu gibi ...
Michael Scheper

5
Her durumda, bu yararlı ve tamamen makul bir cevaptır - yine, web sitelerinin% 70'i jQuery kullanır. Geliştiricilerin dini inançları nedeniyle aşağılanmamalıdır.
Michael Scheper

133

Standart olmayan Date yöntemini kullanabileceğinizi düşünüyorumtoLocaleFormat(formatString)

formatString:strftime() C'deki fonksiyon tarafından beklenen formatta bir format dizesi .

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

Referanslar:


160
toLocaleFormat () yalnızca Firefox'ta çalışıyor gibi görünüyor. Hem IE hem de Chrome benim için başarısız oluyor.
fitzgeraldsteele

16
Chrome'da .toLocaleString ('en') yöntemi vardır. Görünüşe göre yeni tarayıcı bu geliştiriciyi
apocalypz


6
herkes uygulayabilseydi bu en iyi çözüm olurdu. lanet olsun yani / chrome
santa

6
@santa: Gerçekten. Belki de Mozilla'nın bu konuda izlememesinin makul bir nedeni vardı, ancak ES6'nın bile bunun için standart bir işlevi olmadığı gerçeği, bir geliştiricinin dili değil, hala bir bilgisayar korsanının dili olduğunu gösteriyor.
Michael Scheper

105

Düz JavaScript, küçük kullanıcılar için en iyi seçimdir.

Öte yandan, daha fazla tarihe ihtiyacınız varsa, MomentJS harika bir çözümdür.

Örneğin:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours

2
bahsetmek önemlidir: ve YYYYarasındaki farkı bilmiyorsanız kullanmayın : stackoverflow.com/questions/15133549/…YYYYyyyy
Domin

@ Objective-C veya Swift'den kullanıldığı gibi iOS'ta NSDateFormatter'a özgü @Domin. Bu soru tarayıcıdaki Javascript ile ilgilidir ve bu cevap MomentJS kullanır, burada YYYY(değil yyyy) standart yıl ve GGGG(değil YYYY) ISO haftası tabanlı yıl.
Mark Reed

2
Moment% 100'dür değil eskimiş @Gerry
Liam

97

Modern tarayıcılarda (*) şunları yapabilirsiniz:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

Bugün uygulandığında çıktı (24 Ocak 2016):

'24-Jan-2016'

(*) MDN'ye göre , "modern tarayıcılar" Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ ve Safari gecelik yapıları anlamına gelir .


Bu işlevin desteklenip desteklenmediğini kontrol etmenin bir yolu var mı?
James Wierzba

@JamesWierzba: Şunları kullanabilirsiniz bu polyfill !
John Slegers

Bu caniuse.com'da bile listelenmiyor: /
Charles Wood

51

Date.js'ye bir göz atmalısınız . Tarihlerle çalışmak için birçok uygun yardımcı ekler, örneğin, sizin durumunuzda:

var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));

Başlarken: http://www.datejs.com/2007/11/27/getting-started-with-datejs/


Teşekkürler. Bu, az yer kaplayan çok kapsamlı ve eksiksiz bir kütüphanedir.
mitcheljh

Ben şu anda Date.parse bir sayı alıyorum düşünüyorum süre date = new Date (fromString) daha fazla işlevi vardır. Ne yazık ki toString'e sürpriz olarak biçimlendirmek için geçirilen argümanı yorumlamadan sadece bir varsayılan gösteriliyor gibi görünüyor. ToDateString için NodeJS 11+ kullanmak daha kısa bir çıktıdır ancak biçimlendirme almaz. Tüm gördüğüm çok kıvrımlı bir yerLocaleDateString
Usta James

38

İstediğiniz formatı hiçbir kitaplık ve Tarih yöntemi kullanmadan tek bir satırda alabilirim, sadece normal ifade verin:

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

Testlerimde, bu büyük tarayıcılarda (Chrome, Safari, Firefox ve IE) güvenilir bir şekilde çalışıyor. doğrudan JavaScript motorunuzda çalışır. Hatta dize çıktısını test etmek için bazı kodlar ekleyebilir ve regex değiştirmeden önce beklediğinizle eşleştiğinden emin olabilirsiniz.


console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
John

@ André - Katılıyorum. Bu benim kod olsaydı, ben kesinlikle yanında regex açıklayan ve giriş ve karşılık gelen çıktı bir örnek veren bir yorum içerir.
JD Smith

zaman parçası ne dersin (SS: dd: ss)?
Ocak'ta

@ unruledboy var d = (yeni Tarih ()). toString (). değiştirin (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s. * / , '$ 2- $ 1- $ 3 $ 4'); - veya tarihin kendisi olmadan sadece zaman bölümünü almak için şunu kullanın: var d = (yeni Tarih ()). toString (). replace (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s * / '$ 4').;
JD Smith

37

@ Sébastien - alternatif tüm tarayıcı desteği

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

Belgeler: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString


5
.Replace () yapmak yerine, yerel olarak 'en-GB' kullanabilirsiniz. :)
Roberto14

1
Bu gerçekten güzel, örneğin new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})geri dönüyor"Wed, Sep 06, 2017"
Peter T.

37

Tamam , Intl adında , bu günlerde JavaScript'te bir tarihi biçimlendirmek için çok yararlı olan bir şeyimiz var :

Tarihiniz aşağıdaki gibidir:

var date = '10/8/2010';

Ve aşağıdaki gibi yeni Date () kullanarak Date olarak değiştirebilirsiniz:

date = new Date(date);

Ve şimdi aşağıdaki gibi yerel ayarların bir listesini kullanarak istediğiniz şekilde biçimlendirebilirsiniz :

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 


date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 


date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

Yukarıda belirttiğiniz biçimi tam olarak istiyorsanız, şunları yapabilirsiniz:

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

Ve sonuç şu olacak:

"10-Aug-2010"

Daha fazla bilgi için Intl API ve Intl.DateTimeFormat belgelerine bakın.


IE tarafından desteklenmiyor
Pantolon

Sadece IE11 tarafından, IE10- bu var olmadan önce hayat dışı olmuştur, bu yüzden anlaşılabilir. Caniuse'den% 92, oldukça iyi bir caniuse.com/#search=datetimeformat
Tofandel

32

ECMAScript Edition 6 (ES6 / ES2015) dize şablonunu kullanma:

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

Sınırlayıcıları değiştirmeniz gerekirse:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);

30

Paketlenmiş Çözüm: Luxon

Herkese uyacak tek bir çözüm kullanmak istiyorsanız , birçok yerde / dilde ve tonlarca başka özellikte de biçimlendirme yapan Luxon'u ( Moment.js'nin modern bir sürümü ) kullanmanızı şiddetle tavsiye ederim .

Luxon, Moment.js web sitesinde barındırılmaktadır ve bir Moment.js geliştiricisi tarafından geliştirilmiştir, çünkü Moment.js, geliştiricinin ele almak istediği ancak yapamadığı kısıtlamalara sahiptir.

Yüklemek:

npm install luxonveya yarn add luxon(diğer kurulum yöntemleri için bağlantıyı ziyaret edin)

Misal:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

Verim:

10-Ağustos-2010

Manuel Çözüm

Moment.js, Class DateTimeFormatter (Java) ve Class SimpleDateFormat (Java) gibi benzer biçimlendirmeler kullanarak formatDate(date, patternStr), kodun okunması ve değiştirilmesi kolay olan kapsamlı bir çözüm uyguladım . Tarih, saat, AM / PM vb. Görüntüleyebilirsiniz. Daha fazla örnek için koda bakın.

Misal:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

( formatDateaşağıdaki kod snippet'inde uygulanır)

Verim:

12 Ekim 2018 Cuma 18: 11: 23: 445

"Kod snippet'ini çalıştır" ı tıklayarak kodu deneyin.

Tarih ve Saat Modelleri

yy= 2 haneli yıl; yyyy= tam yıl

M= basamak ay; MM= 2 haneli ay; MMM= kısa ay adı; MMMM= tam ay adı

EEEE= tam hafta içi adı; EEE= hafta içi kısa adı

d= basamaklı gün; dd= 2 haneli gün

h= am / pm; hh= 2 basamaklı saat am / pm; H= saat; HH= 2 basamaklı saat

m= dakika; mm= 2 basamaklı dakika; aaa= ÖÖ / ÖS

s= saniye; ss= 2 basamaklı saniye

S = milisaniye

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
    if (!patternStr) {
        patternStr = 'M/d/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        h = hour % 12,
        hh = twoDigitPad(h),
        HH = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        aaa = hour < 12 ? 'AM' : 'PM',
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    // checks to see if month name will be used
    patternStr = patternStr
      .replace('hh', hh).replace('h', h)
      .replace('HH', HH).replace('H', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa);
    if (patternStr.indexOf('MMM') > -1) {
        patternStr = patternStr
          .replace('MMMM', MMMM)
          .replace('MMM', MMM);
    }
    else {
        patternStr = patternStr
          .replace('MM', MM)
          .replace('M', M);
    }
    return patternStr;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));

@Gerry Luxon'u getirdiğin için teşekkür ederim.


1
Bu arada, zahmetli SimpleDateFormatsınıf yıllar önce java.time.format.DateTimeFormattersınıf tarafından desteklendi .
Basil Bourque

1
@BasilBourque, kaydetti. Her ikisi de aynı kalıpları kullanıyor. 5 yıldır Java8 öncesi bir projedeydim, bu yüzden daha yeni şeylere hiç maruz kalmadım. Teşekkürler!
lewdev

Java.time işlevselliğinin çoğunu neredeyse aynı API ile elde etmek için Java 6 ve 7 için ThreeTen-Backport projesine bakın .
Basil Bourque

@BasilBourque referans için teşekkürler, ama artık bu proje üzerinde çalışmıyorum ama ortaya çıktığında bunu kesinlikle aklımda tutacağım.
lewdev

2
an eski, luxon kullanın
Gerry

19

İşte üzerinde çalıştığım bir projenin tarih biçimlendirmesini işlemek için yazdığım bazı kodlar. Benim ihtiyaçlarına uygun PHP tarih biçimlendirme işlevselliğini taklit eder. Kullanmaktan çekinmeyin, sadece mevcut olan Date () nesnesini genişletiyor. Bu en şık çözüm olmayabilir ama ihtiyaçlarım için çalışıyor.

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/

18

Harici kitaplık kullanmadan bir JavaScript çözümü:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)



15

Bunun için birçok çözümümüz var, ama bence en iyisi Moment.js. Bu yüzden kişisel olarak Moment.js'yi tarih ve saat işlemleri için kullanmanızı öneririm.

console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>


neden jquery ekliyorsunuz?
Ced

1
Ohh üzgünüm gerektirmez. Teşekkürler @Ced
Vijay Maheriya

moment.js'ye sahip olduğum tarihi nasıl sağlayabilirim? Bence her zaman güncel zaman alır.
Dave Ranjan

1
@DaveRanjan Özel tarihinizi dönüştürmeniz gerektiğini düşünüyorum. Bu yüzden şunu kullanın: console.log (moment ('2016-08-10'). Biçim ('DD-MMM-YYYY'));
Vijay Maheriya

Evet, daha sonra anladım. Teşekkürler :)
Dave Ranjan

15

JavaScript'te DateTimes'ı biçimlendirmenin kullanışlı ve esnek bir yolu Intl.DateTimeFormat:

var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));

Sonuç: "12-Oct-2017"

Tarih ve saat biçimleri seçenekler argümanı kullanılarak özelleştirilebilir.

Intl.DateTimeFormatKonudil duyarlı tarih ve saat biçimlendirmeyi etkinleştirme nesneler için bir yapıcı olduğunu.

Sözdizimi

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

Parametreler

yerel ayarlar

İsteğe bağlı. BCP 47 dil etiketine sahip bir dize veya bu dizelerden oluşan bir dizi. Locales argümanının genel biçimi ve yorumu için, Intl sayfasına bakın. Aşağıdaki Unicode uzantı anahtarlarına izin verilir:

nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

Seçenekler

İsteğe bağlı. Aşağıdaki özelliklerin bir kısmına veya tümüne sahip bir nesne:

localeMatcher

Kullanılacak yerel ayar algoritması. Olası değerler "lookup"ve "best fit"; varsayılan değer "best fit". Bu seçenek hakkında bilgi için Intl sayfasına bakın.

saat dilimi

Kullanılacak saat dilimi. Uygulamaların tanıması gereken tek değer "UTC"; varsayılan, çalışma zamanının varsayılan saat dilimidir. Uygulamalar ayrıca gibi IANA zaman dilimi veritabanının zaman dilimi adları tanıyabilir "Asia/Shanghai", "Asia/Kolkata", "America/New_York".

hour12

12 saatlik zamanın kullanılıp kullanılmayacağı (24 saatlik zamanın aksine). Olası değerler trueve false; varsayılan ayar yerel ayara bağlıdır.

formatMatcher

Kullanılacak biçim eşleme algoritması. Olası değerler "basic"ve "best fit"; varsayılan değer "best fit". Bu özelliğin kullanımı hakkında bilgi için aşağıdaki paragraflara bakın.

Aşağıdaki özellikler, biçimlendirilmiş çıktıda kullanılacak tarih-saat bileşenlerini ve bunların istenen temsillerini açıklar. Uygulamaların en azından aşağıdaki alt kümeleri desteklemesi gerekir:

weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute

Uygulamalar diğer alt kümeleri destekleyebilir ve en iyi eşleşmeyi bulmak için mevcut tüm alt küme gösterim kombinasyonlarına karşı talepler müzakere edilir. Bu anlaşma için iki algoritma kullanılabilir ve formatMatcher özelliği tarafından seçilir: Tam olarak belirlenmiş bir "basic"algoritma ve uygulamaya bağlı bir "en uygun" algoritması.

Hafta içi

Hafta içi temsili. Olası değerler "narrow", "short", "long".

çağ

Dönemin temsili. Olası değerler "narrow", "short", "long".

yıl

Yılın temsili. Olası değerler "numeric", "2-digit".

ay

Ayın temsili. Olası değerler "numeric", "2-digit", "narrow", "short", "long".

gün

Günün temsili. Olası değerler "numeric", "2-digit".

saat

Saatin gösterimi. Olası değerler "numeric", "2-digit".

dakika

Dakikanın temsili. Olası değerler "numeric", "2-digit".

ikinci

İkincisinin temsili. Olası değerler "numeric", "2-digit".

timeZoneName

Saat dilimi adının gösterimi. Olası değerler "short", "long". Her bir tarih-saat bileşeni özelliği için varsayılan değer tanımlanmamıştır, ancak tüm bileşen özellikleri tanımlanmamışsa, yıl, ay ve günün olduğu varsayılır "numeric".

Çevrimiçi Kontrol

Daha fazla detay


15

Bu sorunla ilgili yardımcı olabilir:

var d = new Date();

var options = {   
    day: 'numeric',
    month: 'long', 
    year: 'numeric'
};

console.log(d.toLocaleDateString('en-ZA', options));

Biçimi bulma tarihi


2
veya d.toLocaleDateString('en-US', options);ABD'deyseniz.
BishopZ

Bu benim çözümümdü. Teşekkür ederim.
Steven Rogers

13

Npm eklentilerim için böyle uyguladım

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

Hangi pakete atıfta bulunuyorsunuz?
lbrahim

Bunun bir hatası var: Önce ay adları değiştirilir, ardından ayın adı da değiştirilir. Örneğin bu kodla birlikte Marcholacak 3arch.
ntaso

1
Değiştirme çizgisi 'M'için format = format.replace("M(?!M)", (dt.getMonth()+1).toString());ve çizginin üstüne koydu'MMMM'
ntaso

9
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();

8

Sugar.js, Date.format yöntemi de dahil olmak üzere Date nesnesine mükemmel uzantılara sahiptir .

Belgelerden örnekler:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')

8

Kopyalamak, yapıştırmak ve benimsemek için gerçekten basit bir ES6 çözümü arayan herhangi biri için:

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04


8

2019'dan itibaren, sadece belirli parçaları iade etmek içinLocaleDateString'e sahip olabilirsiniz ve sonra istediğiniz gibi bunlara katılabilirsiniz:

var date = new Date();

console.log(date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + "-"+ date.toLocaleDateString("en-US", { month: 'short' })
            + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> 16-Nov-2019

console.log(date.toLocaleDateString("en-US", { month: 'long' }) 
            + " " + date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + ", " + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> November 16, 2019

8

DayJ'lere bir göz atmalısınız. MomJ'lerin bir versiyonu ama modüler mimari çok daha hafif.

Aynı modern API ile Moment.js'ye hızlı 2 KB alternatif

Day.js, büyük ölçüde Moment.js uyumlu bir API ile modern tarayıcıların tarihlerini ve saatlerini ayrıştıran, doğrulayan, düzenleyen ve görüntüleyen minimalist bir JavaScript kütüphanesidir. Moment.js kullanıyorsanız, Day.js'yi nasıl kullanacağınızı zaten biliyorsunuzdur.

var date = Date.now();
const formatedDate = dayjs(date).format("YYYY-MM-DD")
console.log(formatedDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.16/dayjs.min.js" crossorigin="anonymous"></script>


7

"10-Ağu-2010" edinmek için şunu deneyin:

var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})

Tarayıcı desteği için, bkz .LocaleDateString .


Ben bir "-" gerek yoktu, burada zaman, tarih ve saat dilimi ile daha kısa bir versiyonu! tarih = yeni Tarih (); date.toLocaleDateString (tanımsız, {gün: '2 basamaklı', ay: 'kısa', yıl: 'sayısal', saat: 'sayısal', dakika: 'sayısal', timeZoneName: 'kısa'}); :)
varun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.