2016-12-30 15 views
0

配列の要素に戻り値を代入しようとしていますが、何らかの理由で配列の両方の要素を2番目の要素だけでなく同じ値に上書きしています。JavaScript - 戻り値が無効な配列インデックスを割り当てる

私がこれを使用しているdatepickerは、参考までにここにあります。

http://www.eyecon.ro/datepicker/

function AddDays(date, days) 
{ 
    var newDate = new Date(date.setTime(date.getTime() + days * 86400000)); 
    return newDate; 
} 

$('#nights').on('change', function(){ 
    var $dp = $('#date'); 
    var t = $dp.DatePickerGetDate(); 
    console.log(t); // Output 1 
    t[1] = AddDays(t[0], $(this).val()); 
    console.log(t); // Output 2 
}); 

出力1:[月2017年1月2日00:00:00 GMT-0600(中央標準時)、日2017年1月8日23時59分59秒GMT-0600(中部標準時)]

出力2:[月2017年1月9日00:00:00 GMT-0600(中央標準時)、月2017年1月9日00:00:00 GMT-0600(中央標準時)]

ご覧のとおり、2番目の要素をt[1]に割り当てようとすると、返り値はAddDays(t[0], $(this).val())両方の日付が同じ正確な日付に設定されます。ただし、2番目の要素は、最初の要素に指定された日数を加えたものに等しいとみなされます。

要素$(this).val()がゼロでないことも確認しました。私の場合は、の割り当ての直前にconsole.log($(this).val());を実行すると、実際には7を返します。

私はここで間違っていますか?

+0

実例を作成できますか? – Dekel

+0

元の日付を 'Date'コンストラクタに渡す前に突然変異を起こしているので、自然に同じ時刻に終わるでしょう。 'd.setTime()'を削除してください。 –

答えて

1

この関数は、setTimeを呼び出したときに渡された日付を変更します。あなたの問題を解決するためにsetTimeへの呼び出しを削除することができます。

function addDays(date, days) { 
    return new Date(date.getTime() + (days * 86400000)); 
} 

やブランドの新しいDateオブジェクトを作成し、そのコピーにsetDateまたはsetTimeを呼び出します。

function addDays(date, days) { 
    var result = new Date(date); 
    result.setDate(result.getDate() + days); 
    return result; 
} 
+0

これは実際に私のために働いた答えでした。ありがとう。魅力のように働いた。 – Entevily

関連する問題