2016-04-24 14 views
-1

への文字列の要素は、私がscheduleDates文字列の配列を持っている:JavaScript forEach。日付

0:"24.04.2016, 11:53" 
1:"12.04.2016, 10:07" 
2:"13.04.2016, 9:45" 

私は同じ配列で型に文字列要素を交換する必要があります。

は、私が試した:

scheduleDates.forEach(function (date) { 
    var currDate = date.split(', ')[0]; 
    var currTime = date.split(', ')[1]; 
    var hours = currTime.split(':')[0]; 
    var minutes = currTime.split(':')[1]; 
    var year = currDate.split('.')[2]; 
    var month = currDate.split('.')[1]; 
    var day = currDate.split('.')[0]; 
    var newDate = new Date(year, month, day, hours, minutes); 
    date = newDate; 
}); 

それは

答えて

0
var scheduleDates = ["24.04.2016, 11:53","12.04.2016, 10:07","13.04.2016, 9:45"]; 

scheduleDates = scheduleDates.map(function (date) { 
    var currDate = date.split(', ')[0]; 
    var currTime = date.split(', ')[1]; 
    var hours = currTime.split(':')[0]; 
    var minutes = currTime.split(':')[1]; 
    var year = currDate.split('.')[2]; 
    var month = currDate.split('.')[1]; 
    var day = currDate.split('.')[0]; 
    return new Date(year, month-1, day, hours, minutes); 
}); 
+0

それはChromeで動作しますが、IEのエラーに - 無効な日付を。 – endovitskiiy

+0

まだ無効な日付 – endovitskiiy

+0

それは動作するはずです。月-1に注意してください –

0

dateは、すべての関数呼び出しに対してローカルな変数では動作しません。配列内の位置ではなく、このローカル変数に代入しています。

新しい値を正しいインデックスに割り当てるのが醜い修正です。これはちょっとハッキーで、一般的にはforEachが意図したものではありません。

scheduleDates.forEach(function (date, index) { 
    var currDate = date.split(', ')[0]; 
    var currTime = date.split(', ')[1]; 
    var hours = currTime.split(':')[0]; 
    var minutes = currTime.split(':')[1]; 
    var year = currDate.split('.')[2]; 
    var month = currDate.split('.')[1]; 
    var day = currDate.split('.')[0]; 
    var newDate = new Date(year, month, day, hours, minutes); 

    scheduleDates[index] = newDate; 
}); 

代わりにmapを使用して、結果の配列を変数に割り当てることができます。

scheduleDates = scheduleDates.map(function (date) { 
    // ... 

    return newDate; 
}); 

または、あなた自身の破壊的な地図をロールして、簡単にすることができます。

function mapd (array, block) { 
    var length = array.length; 

    for (var i = 0; i < length; i++) { 
    array[i] = block(array[i], i); 
    } 
} 

mapd(scheduleDates, function (date) { 
    // ... 

    return newDate; 
}); 
0

あなたが代わりのforEachのマップを使用する必要がありますまず第一に。あなたの目的に一層合っています。

function toDateObject(date) { 
    var currDate = date.split(', ')[0]; 
    var currTime = date.split(', ')[1]; 
    var hours = currTime.split(':')[0]; 
    var minutes = currTime.split(':')[1]; 
    var year = currDate.split('.')[2]; 
    var month = currDate.split('.')[1]; 
    var day = currDate.split('.')[0]; 
    return new Date(year, month, day, hours, minutes); 
} 

var scheduleDates = ["24.04.2016, 11:53","12.04.2016, 10:07","13.04.2016, 9:45"].map(toDateObject); 

Array.prototype.mapは、配列の各要素と収集内のすべての結果に引数として与えられた関数を適用します。ここでは

は、私は(あなたの初期の考えに従うことによって)何をするのかであります新しい配列は結果です。

この場合、文字列の配列を受け取り、それぞれにtoDateObject関数を適用し、その関数呼び出しの結果の新しい配列を返します。

ここでそれについて詳しく読む:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map