2011-06-03 21 views

cevap

22
var myDate = new Date('2011-06-02T09:34:29+02:00'); 
alert(myDate); 
+5

ISO8601 biçimi, * varsayılan format olmadığından * işe yaramayacak ES3 uygulamalarına sahip tarayıcılarda [ECMAScript 5] (http://es5.github.com/#x15.9.1.15) 'da standartlaştırılmıştır. spesifikasyonun bu sürümünde açıklanmıştır. – CMS

+0

@CMS, bilmek güzel. Çok kolay göründü :) @Luc, ES3 uygulayan tarayıcıları destekliyorsanız ** Eli'nin ** cevabını kontrol edin. –

+0

@ jason-mccreary, hmmm .... Dizenin her bir parçasını bölmeye ve yeni bir tarih oluşturmaya çalışıyordum ve bu çözümle geliyorsunuz ... Peki, çok teşekkürler :) – Luc

5

, sadece tarihi yapıcı içine geçmek ve bir Date nesnesi vazgeçme alabilirsiniz:

var date = new Date('2011-06-02T09:34:29+02:00'); 

göre http://dev.enekoalonso.com/2010/09/21/date-from-iso-8601-string/ için olsa da, bu IE sorunlar olabilir ve diğer platformlar. Bu uyumluluk için böyle bir şey yapmak tavsiye eder: diğer tarayıcıların

function dateFromISO8601(isostr) { 
    var parts = isostr.match(/\d+/g); 
    return new Date(parts[0], parts[1] – 1, parts[2], parts[3], parts[4], parts[5]); 
} 

var myDate = dateFromISO8601("2011-06-02T09:34:29+02:00"); 
console.log(myDate); 
+2

, hesaba alınan zaman dilimi nedir? Jun 02 2011'i kullandığınızda 20 Eylül 2010'u döndürür. – Luc

7

IE 8 ve altında ve daha eski sürümler ISO tarih biçimini uygulamak gerekmez. Bir problem, tarayıcılardan bazılarının NaN yerine bir tarih döndürmesidir, doğru olanı değil.

Desteklemek istiyorsanız, kendi yönteminizi yazabilirsiniz. Zaman dilimi zorlu bittir.

Bu örnek bir kez çalışacak ve bir Date.fromISO yöntemi ayarlayacaktır - yerel yöntem destekleniyorsa bunu kullanacaktır.

(function(){ 
var D= new Date('2011-06-02T09:34:29+02:00'); 
if(isNaN(D) || D.getUTCMonth()!== 5 || D.getUTCDate()!== 2 || 
D.getUTCHours()!== 7 || D.getUTCMinutes()!== 34){ 
    Date.fromISO= function(s){ 
     var day, tz, 
     rx=/^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, 
     p= rx.exec(s) || []; 
     if(p[1]){ 
      day= p[1].split(/\D/); 
      for(var i= 0, L= day.length; i<L; i++){ 
       day[i]= parseInt(day[i], 10) || 0; 
      } 
      day[1]-= 1; 
      day= new Date(Date.UTC.apply(Date, day)); 
      if(!day.getDate()) return NaN; 
      if(p[5]){ 
       tz= (parseInt(p[5], 10)*60); 
       if(p[6]) tz+= parseInt(p[6], 10); 
       if(p[4]== '+') tz*= -1; 
       if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz); 
      } 
      return day; 
     } 
     return NaN; 
    } 
    // remove test: 
    alert('ISO Date Not correctly implemented'); 
} 
else{ 
    Date.fromISO= function(s){ 
     return new Date(s); 
    } 
    // remove test: 
    alert('ISO Date implemented'); 
} 
})() 


// remove test 
var D=Date.fromISO('2011-06-02T09:34:29+02:00'); 
alert(D.toUTCString()) 
İlgili konular