2011-06-02T09:34:29+02:00 ?
I (besbelli) saat dilimi kısmı ile sorun var. dize bir ISO8601 dizge ise
2011-06-02T09:34:29+02:00 ?
I (besbelli) saat dilimi kısmı ile sorun var. dize bir ISO8601 dizge ise
var myDate = new Date('2011-06-02T09:34:29+02:00');
alert(myDate);
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
@CMS, bilmek güzel. Çok kolay göründü :) @Luc, ES3 uygulayan tarayıcıları destekliyorsanız ** Eli'nin ** cevabını kontrol edin. –
@ 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
, 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);
, hesaba alınan zaman dilimi nedir? Jun 02 2011'i kullandığınızda 20 Eylül 2010'u döndürür. – Luc
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())
ISO8601 tarihleri ECMAScript v5 ile tanıtıldı. Eski tarayıcılar bunu desteklemeyecektir. –
, yeni Date (SomeISODateString) kullandığınızda, yerel tarih saatine dönüştürmeyi nasıl engelleyeceğiniz ...? – bhargav