Javascriptは間違いなく私の最大のポイントではありません。私はこれを数時間試してきましたが、どこかで日付のフォーマットにこだわっているようです。
ユーザーが日付(dd/mm/yyyy)を選択し、この日付が取得されて2週間が追加され、日付が別のフォームフィールドにコピーされるフォームがあります。
以下の私の最新の試みは、日付を追加することさえしていませんが、1つのフォームフィールドで選択した日付を別のフィールドにコピーするだけです。「03/02/2012」を選択すると、「Fri Mar 02 2012 00:00:00 GMT + 0000 (GMT標準時) 'であるため、アメリカ形式および完全な日付で出力されます。同じ形式で出力して2週間追加するにはどうすればよいですか?
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
document.frmAccept.acceptLicence.value = date1;
}
あなたはこれを行うことができます :
let numWeeks = 2;
let now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
alert(now);
フィドルを見ることができます こちら 。
SetDate()メソッドは、現在設定されている月の開始日を基準にしてDateオブジェクトの日を設定します。
これは質問自体には答えないかもしれませんが、これらの式で解決策を見つけることができます。
_6.04e+8
_ =ミリ秒で1週間
Date.now()
=ミリ秒単位で
Date.now() + 6.04e+8
=今日から1週間
Date.now() + (6.04e+8 * 2)
=今日から2週間
new Date( Date.now() + (6.04e+8 * 2) )
=今日から2週間の日付オブジェクト
_date1
_を、渡す文字列をで表すDateオブジェクトに割り当てています。 acceptLicense
値に表示されるのは、日付オブジェクトのtoString()
表現です(これを確認するにはalert(date1.toString())
を試してください)。
必要に応じて出力するには、文字列の連結と さまざまなDate
メソッド を使用する必要があります。
_var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
_
2週間の追加に関しては、現在の日付に14日を追加する必要があります。
_date1.setDate(date.getDate() + 14);
_
...これにより、月の増加などが自動的に処理されます。
最終的には、次のようになります。
_var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
_
N.BJavaScriptの月は0インデックス(1月= 0、12月= 11)であるため、月の_+1
_です。
Edit:コメントに対処するには、代わりにdate
を作成する必要があります。Date
引数は「RFC2822またはISO 8601を表す文字列」日付。" ( こちらを参照 )。
_var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);
_
var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));
ここで、7は日付に追加する日です
Toastの答えに対する最小限の修正だけで、探している正確な形式が得られますdd/mm/yyyy:
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14); //This adds the two weeks
var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate();
var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth();
document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear();
}
これはあなたが探していることをするはずです。
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
特定のdd/mm/yyyy
形式を解析して14で日を増分するには、パーツを分割するなどの方法で、特定のy/m/dで日付オブジェクトを作成します。 (すぐに日数を増やします)セパレーターは常に-
であるため、次のように動作します:
function LicenceToOccupy(acceptCompletionDate)
{
var parts = acceptCompletionDate.split("/");
var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks)
document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done
}