2012-05-03 27 views
28

Olası yinelenen kullanan bir "gg/aa/yyyy" veya "gg-aa-yyyy" veya "gg-aaa-yyyy" biçimlendirilmiş tarih dizesi ayrıştırmak nasıl:
Extending JavaScript's Date.parse to allow for DD/MM/YYYY (non-US formatted dates)?
Convert dd-mm-yyyy string to date1985/05/09 ve ben 05-Eylül-1985 (gg-AAA-yyyy) biçimine dönüştürmek istedik: JavaScript veya jQuery

örneğin metin kutusuna bir tarih girdi. Bunu nasıl başarabilirim? kaynak biçimi dd-mm-yyyy veya dd/mm/yyyy veya dd-mmm-yyyy formatını olabileceğini unutmayın.

Kod Parçacığı:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val()); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

Bu kod 09-Mayıs-1985 verir ama 05-Eylül-1985 istiyorum. Teşekkürler.

cevap

39

var day = moment("12-25-1995", "MM-DD-YYYY"); 
: Daha kolay manipülasyonlara

Sonra gibi şeyler yapabilirsiniz için tarih nesnesi

veya

var day = moment("25/12/1995", "DD/MM/YYYY"); 

sonra

day.add('days', 7) 

tarihte işletmek ve ben daha önce tarih biçimini tahmin edemez javascript tarih

day.toDate(); 
31

Güncelleme

söylediğin belirttik:

Üzgünüm, ben, daha önce tarih biçimini tahmin edemez o gg-aa-yyyy veya gg/aa/yyyy veya benzeri olmalıdır dd-mmm-yyyy formatı nihayet tüm bu formatı dd-MMM-yyyy formatına çevirmek istedim. tamamen soru değiştirir Yani

. Biçimi kontrol edemiyorsanız çok daha karmaşık olacak. Bir tarih formatı belirtmenize izin verecek hiçbir JavaScript içermez. pratikte neredeyse tüm tarayıcılar da yanı yyyy/mm/dd destekleyen rağmen yyyy-mm-dd: Resmi olarak JavaScript tarafından desteklenen tek tarih formatı bir simplified version of ISO-8601 olduğunu. Fakat bunun dışında, kodu kendiniz yazmanız gerekiyor (ya da bu daha mantıklı) iyi bir kütüphane kullanıyorsunuz. Muhtemelen (DateJS rağmen yıllarda henüz tutulan) moment.js veya DateJS gibi bir kütüphane kullanmayı tercih ediyorum.


Orjinal cevap: formatı her zaman dd/mm/yyyy olduğunu

, o zaman bu oldukça basittir:

var parts = str.split("/"); 
var dt = new Date(parseInt(parts[2], 10), 
        parseInt(parts[1], 10) - 1, 
        parseInt(parts[0], 10)); 

split verilen sınırlayıcıya bir dize böler. Sonra sayıların dizeleri dönüştürmek için parseInt kullanıyoruz ve bu parçaların bir Date inşa etmek new Date yapıcı kullanın: Üçüncü bölüm, ikinci bölüm ay ve ilk bölümü gün yıl olacak. Date sıfır tabanlı ay sayılarını kullanır ve bu nedenle ay numarasından bir çıkartmamız gerekir.

+0

Maalesef yerli olsun, olması gerektiği dd-mm-yyyy veya gg/aa/yyyy veya gg-mmm-yyyy biçiminde olduğu gibi, tüm bu formatı dd-MMM-yyyy biçimine dönüştürmek istedim. –

+0

@SharanammaJekeen: Bu ** tamamen ** soruyu değiştirir. Güncellemeye bakın. –

+0

Kaynak formatı dd/aa/yyyy biçiminde düzelteceğim. –

7

Date.parse sadece belirli biçimlerini tanır ve size giriş biçimi ne anlatıp seçeneği yok. Bu durumda, girdinin mm/dd/yyyy biçiminde olduğunu düşünür, sonuç yanlıştır.

Bunu düzeltmek için, ya (örneğin String.split ile) girişi kendinizi ayrıştırmak ve sonra manually construct bir Date nesne veya bu tür datejs gibi daha tam özellikli kütüphane kullanmak gerekir. Manuel ayrıştırma için

Örnek:

var input = $('#' + controlName).val(); 
var parts = str.split("/"); 
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 

Örnek kullanarak date.js:

var input = $('#' + controlName).val(); 
var d1 = Date.parseExact(input, "d/M/yyyy"); 
+0

o zaman nasıl yukarıdaki formatı elde edebilirim? –

+0

@SharanammaJekeen: Ne demek istediğinden emin değilim ... – Jon

+1

date.js kullanışlı! – yorkw

2

bu deneyin:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1')); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

RegExp .replace(/([0-9]+)\/([0-9]+)/,'$2/$1') değişim gün/ay konumunu değiştirin.

+0

"RegEx" in güzel kullanımı. –

0

bu

tarihle her şeyi yapabilir bakın.

dosyası: http://stevenlevithan.com/assets/misc/date.format.js

komut dosyası etiketi kullanarak html kodu ekleyin ve olarak kullanabilirsiniz kullanılır? Yerli javascript sarar http://momentjs.com/ gibi yardımcı kütüphanesini kullanmak isteyebilirsiniz

var now = new Date(); 

now.format("m/dd/yy"); 
// Returns, e.g., 6/09/07 
+0

http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

+1

Lütfen yorum eklemek için oy verin, böylece en azından hatamı bilebilirim –

+0

Sanırım OP, PARSE'ye bir tarihin nasıl geçtiğini sorduğundan 'dd/mm/yyyy' biçimine nasıl girildiğini sordu ve cevabınız şimdiki tarihi nasıl biçimlendirdiğinizle ilgili olabilir - belki? –

İlgili konular