0

フォームが送信される日を形式 ('MMDDYYYY') で自動的に計算する必要があるフォームに取り組んでおり、2 つのリンクのうちの 1 つをクリックすると、次の月の最も近い最初の日を計算します。 、および翌月の最も近い 15 日。

日付を取得し、必要な形式で変数に出力するスクリプトを既に作成しましたが、ロール フォワードの計算に助けが必要です。

必要だと考えているロジックの例を次に示します。

現在の日付が 04092013 の場合、「Coming 1st of Month」というラベルの付いたボタンを押すと、変数値 05012013 が計算されます。

現在の日付が 04092013 の場合、「Coming 15th of Month」というラベルの付いたボタンを押すと、変数値 04152013 が計算されます。

現在の日付が 04162013 または当月の終わりまでの任意の日付である場合、「今月の 15 日」というラベルの付いたボタンを押すと、変数値 05152013 が計算されます。

4

4 に答える 4

0

日付の形式がわかっているので、入力を部分に分割します。

var dateStr = '04092013'
var month = dateStr.substr(0,2);
var day = dateStr.substr(2,2);
var year = dateStr.substr(4,4);

設定するルールに基づいて新しい日付ベースを作成します。

var newDate;
switch(rule)
{
  case 'rule1':
  newDate = new Date(year, month, 1);//first month is 0
  break;
  case 'rule2':
  newDate = new Date(year, month, 15);//first month is 0
  break;
}
  • 日が 15 より大きいかどうかを確認することを忘れないでください。
于 2013-04-09T23:03:40.443 に答える
0

ここに例があります。文字列として戻したい場合は、必要に応じて最後にフォーマットする必要があります ( UTCで作業します)。

求めているのと同じ日番号の日付を入力すると、1 か月前に進むのではなく、同じ日が返されます。

var date_string = '04092013';
                // MMDDYYYY

function nextNthOfMonth(date_string, n) {
    var date;
    // n to Int, default 1
    n = (+n || 1);
    // date_string to ISO 8601
    date_string = // "yyyy-MM-ddTHH:mm:ssZ"
          date_string.slice(4)
        + '-' + date_string.slice(0, 2)
        + '-' + date_string.slice(2, 4)
        + 'T00:00:00Z';
    // construct date object
    date = new Date(date_string);
    // fix to desired date
    if (n < date.getUTCDate()) { // adjust for month if req.
        date.setUTCMonth(date.getUTCMonth() + 1);
    }
    date.setUTCDate(n);
    return date; // or format as desired
}

nextNthOfMonth(date_string, 1);
// Wed May 01 2013 01:00:00 GMT+0100 (GMT Daylight Time)
nextNthOfMonth(date_string, 15);
// Mon Apr 15 2013 01:00:00 GMT+0100 (GMT Daylight Time)
于 2013-04-09T22:49:32.703 に答える
0

試す

function getDate() {
    var s = document.getElementById('date').value;
    if(s){
        return new Date(s.substring(4), parseInt(s.substring(2, 4), 10) - 1, s.substring(0, 2))
    }
}

function comingDate(date, day){
    date = new Date(date);
    var cday = date.getDate();
    date.setDate(day);
    if(cday >= day){
        date.setMonth(date.getMonth() + 1)
    }
    return date
}

function f15(){
    var d = getDate();
    var next = comingDate(d, 15);
    console.log(next)
}

function f1(){
    var d = getDate();
    var next = comingDate(d, 1);
    console.log(next)
}

デモ:フィドル

于 2013-04-09T22:51:08.250 に答える
0

Date オブジェクトを見てください。必要なものが提供されているはずです。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

たとえば、最初の 2 つのボタンは次のようになります。

$(function() {
    var date = new Date(2013, 10, 24);

    $("#date").html(date.toString());
    $("#date1").html((new Date(date.getYear(), date.getMonth()+1, 1)).toString());
    $("#date2").html((new Date(date.getYear(), date.getMonth()+1, 15)).toString());
});

(ただし、Date のドキュメントを参照すると、これを行う簡単な方法があると思います)

于 2013-04-09T22:42:50.403 に答える