1

コア JavaScript についてはあまり詳しくありません。jQuery についてはほんの少しだけです。しかし、ここで必要なものには jQuery は必要ないことはわかっています。

サーバーの曜日を取得するために getdate 関数を使用したいと考えています。次に、次のような一連の句を追加します。

  • 月曜日の場合は、日付に 6 を加えて、日付を MM/DD/YYYY 形式で返します。
  • 火曜日の場合は、日付に 5 を加えて、日付を MM/DD/YYYY 形式で返します。
  • 水曜日の場合は、日付に 4 を加えて、日付を MM/DD/YYYY 形式で返します。

というように、0 を追加する日曜日まで続きます。

たとえば、今日の月曜日を例にすると、2012 年 1 月 8 日が返されます。実際の日付では、今日の日曜日なので、2012 年 1 月 1 日が返されます

document.write次に、関数を呼び出して、返された MM/DD/YYYY を HTML ドキュメントに書き込みたいだけです。

誰でも私を助けることができますか?あなたが私に必要かどうかを明確にすることができます...

4

3 に答える 3

3

getDay() は、日曜日 = 0、月曜日 = 1 などの曜日を返します。

たとえば、今日が月曜日だった場合、getDay() は 1 を返します。これは、daysToAdd が 5 であることを意味します。

追加する日数がわかったら、新しい日付を作成してそれらの日数を追加できます。これを行うには、今日をミリ秒単位で取得し、日数 (daysToAdd) をミリ秒単位で加算します。

1 日のミリ秒数である 24*60*60*1000 を掛けて、日をミリ秒に変換します。

JavaScript は 0 ベースの月を返すため、月に 1 を追加しますが、表示目的で、たとえば 1 月が 0 ではなく 1 になるようにフォーマットする必要があります。

function getEndOfWeek() {
    var today = new Date();
    var weekDay = today.getDay();
    // if you want the week to start on Monday instead of Sunday uncomment the code below
    //weekDay -= 1;
    //if(weekDay < 0) {
    //    weekDay += 7;
    //}
    var daysToAdd = 6 - weekDay;
    var newDate = new Date(today.getTime() + daysToAdd *24*60*60*1000);
    var month = newDate.getMonth() + 1;
    var day = newDate.getDate();
    var year = newDate.getFullYear();
    var formatedDate = month + "/" + day + "/" + year;
    return formatedDate;
}

JavaScript のようにコードに実装できます。

$(function() {
    $("#TheDate").html(getEndOfWeek());
});

HTML は次のようになります。

The week ends on <span id="TheDate"></span>.

ここで jsFiddle を見つけることができます: jsFiddle

日曜日ではなく月曜日を週の始まりと見なすように曜日を調整する場合は、weekDay を取得した後に次の操作を実行できます。

weekDay -= 1;
if(weekDay < 0) {
    weekDay += 7;
}
于 2012-01-01T07:36:12.760 に答える
0
var day = 1000*60*60*24
, nextSunday = new Date(+new Date() + day*(7-((0|(+new Date()/day)%7-3)||7)));

alert(
    (101+nextSunday.getMonth()).toString().substr(1) + '/' +
    (100+nextSunday.getDate()).toString().substr(1) + '/' +
    nextSunday.getFullYear()
)
于 2012-01-01T09:57:56.263 に答える
0

JavaScipt で日付を追加するのと同じように、私の「DateExtensions」ライブラリはこれで十分だと思います。ここで入手できます:

http://depressedpress.com/javascript-extensions/dp_dateextensions/

参照されると、有効な日付のメソッドとして「add()」を呼び出し、多くの日付部分 (秒、分、日、時間など) のいずれかを渡すことができます。したがって、「curDate」が有効な JavaScript 日付オブジェクトであると仮定すると、次のように 5 日を追加できます。

newDate = curDate.add(5, "日");

負の値を使用すると、次のように減算されます。

newDate = curDate.add(-5, "日");

必要な日付を取得したら、ライブラリの dateFormat() メソッドを使用して、次のように表示できます。

curDate.dateFormat("MM/DD/YYYY");

リンクに完全なドキュメントがあります。

曜日の整数値

必要な整数値を取得することに関しては、実際には見た目が簡単です (そして、「if」は必要ありません)。date の getDay() メソッドは、日曜日を「0」、土曜日を「6」として、曜日を返します。したがって、日曜日からの週は通常次のようになります。

0,1,2,3,4,5,6

まず、そのスケールを逆にします。これは、値から 7 (セットのメンバーの合計数) を減算することで簡単に実行できます。これにより、次のスケールが得られます。

-7,-6,-5,-4,-3,-2,-1

近づいています。最初の値もゼロにする必要があります。これを行う最も簡単な方法 (私が思うに) は、メンバーの総数で値のモジュラス (剰余) を取得することです。これが基本的に行うことは、「-7」をゼロにして、残りをそのままにしておくことです。

0,-6,-5,-4,-3,-2,-1

ほぼ完了しました。最後に、負の数は必要ないため、Math.abs() メソッドを使用して符号を削除 (絶対値を取得) し、目的の結果を得る必要があります。

0,6,5,4,3,2,1

すべての話で、実際のコードはかなりコンパクトです。

Math.abs((cnt-7)%7)

これを元の例にラップすると、次のようになります。

newDate = curDate.add(Math.abs((curDate.getDay()-7)%7), "日");

サーバー対クライアント

ただし、nnnnnn のコメントを心に留めておいてください。JavaScript では、getDate() 関数は、サーバーではなくクライアントである Web ページの場合、実行されているマシンの現在の日付/時刻を取得します。

実際にクライアントの時間を意味していた場合は、設定して完了です。ただし、サーバー時間が本当に必要な場合、それは面倒で不可能です。サーバーを所有している場合、実際には、満たされたリクエストごとに現在のサーバーを Cookie に含めるルールを設定するのはそれほど難しくありません (上記のサイトでも私の Cookie ライブラリを使用して、情報にアクセスできます!)

面倒ですが、サーバーによっては、日付をグローバルとしてハードコーディングする JavaScript を各ページに少し追加する (できればヘッダーのマーク付き置換として) 古い学校のサーバー側インクルードを作成することもできます。変数。

また、現在のサーバー時間を返す Web サービスを作成することもできますが、そのためのクライアント オーバーヘッドは、配信されるデータに比べて異常です。

サーバーがあなたのものではない場合 (そして、所有者に上記の情報を提供してもらうことができない場合)、唯一の可能性のあるオプションは、直接 http 呼び出しを行い、HTTP の "Date" ヘッダーを調べることです。繰り返しになりますが、これのオーバーヘッドはリターンに比べて膨大ですが、実際にはそれが唯一の方法です。ただし、特定のサーバーが日付ヘッダーを返さないか、正しく返さない可能性があるため、このようなシステムは非常に柔軟でなければなりません。

たとえそれが機能したとしても、まだ「サーバー」の時間を取得していない可能性があること、または少なくとも必要なサーバーを取得していない可能性があることを理解してください。たとえば、階層型アーキテクチャでは、アプリケーション サーバーがページをレンダリングし、それを Web サーバーに渡して返す場合があります。アプリケーション サーバーではなく、Web サーバーの時間を取得します。また、任意の数のアプライアンスがヘッダーを書き換える可能性があります (たとえば、専用の SSL アプライアンスを使用してすべての暗号化作業をオフロードするのが一般的です。これらは多くの場合、ヘッダー自体を書き換えます)。

技術的になりすぎて申し訳ありません。JavaScript は、残念ながら「簡単な質問」がほとんどない分野の 1 つです。;^)

幸運を!

于 2012-01-01T08:56:11.550 に答える