54

Javascriptは間違いなく私の最強のポイントではありません。私はこれを数時間試みてきましたが、どこかで日付のフォーマットに行き詰まっているようです。

ユーザーが日付(dd / mm / yyyy)を選択したフォームがあり、この日付が取得され、2週間が追加され、日付が別のフォームフィールドにコピーされます。

以下の私の最近の試みは、日付を追加することすらしていませんが、あるフォームフィールドで選択した日付を別のフォームフィールドにコピーするだけです。「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;

}
4

8 に答える 8

127

あなたはこれを行うことができます :

let numWeeks = 2;
let now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
alert(now);

ここでフィドルを見ることができます。

MDNのドキュメントによると

setDate()メソッドは、現在設定されている月の始まりを基準にしてDateオブジェクトの日を設定します。

于 2012-07-05T12:14:38.800 に答える
11

これはそれ自体では質問に答えられないかもしれませんが、これらの公式で解決策を見つけることができます。

6.048e+8=ミリ秒単位の1週間

Date.now()=ミリ秒単位

Date.now() + 6.048e+8=今日から1週間

Date.now() + (6.048e+8 * 2)=今日から2週間

new Date( Date.now() + (6.048e+8 * 2) )=今日から2週間の日付オブジェクト

于 2018-11-10T06:29:46.810 に答える
6

渡す文字列を表すdate1Dateオブジェクトに割り当てています。値に表示されているのは、日付オブジェクトの表現です(これを確認してみてください)。acceptLicensetoString()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();

JavaScriptの NB+1月は0インデックス(1月= 0、12月= 11)であるため、その月になります。

編集:コメントに対処するには、引数が「RFC2822またはISO 8601の日付を表す文字列」であると想定されているためdate、代わりに次のように構成する必要があります。Dateここを参照)。

var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);
于 2012-07-05T12:10:09.617 に答える
1
var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));

ここで7は日付に追加したい日です

于 2019-08-02T12:05:17.530 に答える
0

これはあなたが探していることをするはずです。

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14);
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
于 2012-07-05T12:10:30.147 に答える
0

特定の形式を解析し、dd/mm/yyyy14で日数を増やすには、パーツを分割するなどの操作を行い、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

}
于 2012-07-05T12:30:31.940 に答える
0

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();
}
于 2016-07-05T19:26:07.553 に答える
-1

すべてがあります!

 date1.toLocaleDateString() 

これにより、クライアント規則でdate1が文字列として返されます

2週間以上の新しい日付date2を作成するには(2週間= 2 * 7 * 24 * 60 * 60秒):

 var date2 = new Date(date1 + 60*60*24*7*2);
于 2012-07-05T12:14:47.620 に答える