Date は js の Array に似ており、両方とも独自の特別なメソッドを持つ特別なオブジェクトです。
Dateはあまり使わないので理解がかなり浅いです。先週、ある年の特定の月の日数を求めるにはどうすればよいかと質問されましたが、少し考えた結果、閏年判定のロジックを自分で書く方法と、2種類あると答えました。各月の日数を配列に格納するには、js Date オブジェクトの特性を使用します (実際にはそれを要約しました...)。しかし、どのような機能が使用されているかを正確に伝えることはできません。そういえば、勉強してまとめてみましょう。
Date get and set series
(注: getTime() の具体的な基準時刻は、1970 年 1 月 1 日 8:00:00 です)
すべてのセットは get シリーズに対応します。 set メソッドはインスタンスを初期化し、インスタンスの属性として呼び出す必要があります。例:
実際、Date オブジェクトの値を設定または返したい場合は、まず存在する価値がある必要があります。標準的な書き方は var date=new Date(2015,7,30);date.getDate() です
new Date() にパラメータが渡されず、set series メソッドが使用されない場合は、 current (ローカル コンピューティング クロック) の値 (時、分、秒を含む)。この機能を js で簡単に使用して、任意の形式で現在時刻を表示できます。
var date = new Date(), nowYear = date.getFullYear(), nowMonth = date.getMonth() + 1, //注意getMonth从0开始,getDay()也是(此时0代表星期日) nowDay = date.getDate(), nowHour = date.getHours(), nowMinute = date.getMinutes(), nowSecond = date.getSeconds(), weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], nowWeek = weekday[date.getDay()]; console.log(nowYear + '年' + nowMonth + '月' + nowDay + '日' + nowHour + '时' + nowMinute + '分' + nowSecond + '秒' + nowWeek);
同様に、組み込みの setInterval または setTimeout コールバック メソッドを使用して、時計効果を簡単に作成できます。
1つ目は、各オブジェクトが持つvalueOf()(実際の値を取得する)とtoString()(文字列形式の値を取得する)です。赤枠内の違いに注目してください。
toTimeString(): Date オブジェクトの日付部分を文字列に変換して返すため、時間パラメータとインスタンスが必要です。
toDateString(): Date オブジェクトの日付部分を文字列に変換し、それを返すには、インスタンスが存在する必要があります。
parse(): 1970 年 1 月 1 日 8:00 から指定された日付 (文字列) までのミリ秒数を秒単位で返します。 Date.parse (Date インスタンス) の形式でのみ呼び出すことができます。 (ミリ秒単位で正確な getTime() との比較に注意してください。)
toSource(): ソースコードを返します。
注: toLocaleString: Date オブジェクトを、UTC と GMT に対応する現地時間形式に従って文字列に変換します。このメソッドは Array と Date の両方で廃止されたため、もう心配する必要はありません。 UTC シリーズはほとんど使用されません。つまり、形式が異なります。
重要な知識ポイントのまとめ
set シリーズのパラメータの説明
setFull Year() の最初の 3 つのパラメータと、時、分、秒が役立ちます。はまだローカルです~~~
その他のセット 系列の最初のパラメータのみが役立ち、戻り値は new Date() (現在時刻) に月/日/分 * に対応する最初のパラメータを加えたものに基づきます。
完全な時間を設定します
明らかに、setTime も一連のセットなので、元の基準に 1992 ミリ秒 (1 秒として表示) が追加されるだけです。 setTime は特殊なので、1970 年 1 月 1 日の午前 8 時にテストしました (FF、Chrome、IE5+、Opera (safari はあまり使用していないのでテストしませんでした))。w3School は 0 時と言っていますが、新しい Date (1970,0,1,8,0,0).getTime() をテストすると、明らかに 0 と表示されます)。そのため、実際の実行前には、日付インスタンスは new Date() に対応する現在時刻ではなくなりますが、基準時間に換算する処理がございます。したがって、表示される値は 1970,0,1,8,0,1 となります。 1992 を 5000 に変更すると、1970,0,1,8,0,5 となります。
完全な時刻を設定する方法は、新しい Date オブジェクトを使用するときに設定する必要がある時刻のパラメーターを渡します。デジタル形式 (11 月 3 日の 10:02 を表す) では、1992、10、3、10、2、50 にすることができます (ミリ秒を追加して getTime() を使用して検出することもできますが、通常は使用されません)。 、1992 50秒)、または標準の文字列形式にすることもできます(ただし、通常はこのようには記述されません~~~)。
getDate()
いつもはフィナーレの後ろに置かれます、ふふ。
getシリーズとして、パラメータの数に加えて、パラメータの値も非常に特殊です。まず元の質問に答えて、ある年の特定の月の最大日数を取得します(これは閏年を判断すると理解できます〜)。
new Date(2014,2,0).getDate(); //返回2014年2月份的最后一天(28)
3 番目のパラメーターが 0 の場合、実際には前月の末日が返されます (月の数字 2 は実際には 3 月であることに注意してください。そのため、コードは当月の 2 月の末日のシリアル番号を返します) )。他の例を見る
コードをコピー
new Date(2014,1,30).getDate(); //返回2014年3月2日在3月份中的天数(2) new Date(2014,2,-1).getDate(); //返回2014年2月份的倒数第二天(27)
//パラメータが欠落している場合は1を表示
new Date(2014,8).getDate(); new Date(14,18).getDate(); new Date(180).getDate();
//冗長なパラメータがある場合、冗長なパラメータは効果を持ちません(arguments[3+]に対する操作は設定されていません)
new Date(2015,2,0,2).getDate();
コードをコピー
日数が多すぎる場合は翌月まで自動計算されますが、日数がマイナスの場合は前月まで計算されます。パラメータが少なすぎると問題が発生します。パラメータが多すぎると、余分な部分は効果がありません。他のセットシリーズと比べても実装の考え方は(2)を見れば分かります。
new Date('xxxx/xx/xx xx:xx:xx') の形式の時刻オブジェクトは、IOS と Andriod システムの両方で正しく認識され、new Date('xxxx-xx-) の形式の時刻オブジェクトは正しく認識されます。 xx xx:xx :xx') の形式の時刻オブジェクトは iOS システムでは正しく認識できないため、変換レイヤーが必要です。
function parseDate(dateStr) { if (!dateStr) { return new Date(); } if (dateStr.indexOf('/') > -1) { return new Date(dateStr); } else { return new Date(dateStr.replace(/-/g, '/')); } }
これらの事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
関連書籍:
以上がJSで日付オブジェクトを操作する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。