/*
======================================= === =============================================
説明:日付オブジェクト拡張子。一般的に使用される中国語の日付形式分析、加算および減算演算、日付の差分、週次演算、および四半期演算が含まれます。
著者:Dezwen
日付:2009-5-30。
==================== = ================================================ = ======
*/
Date.parseCHS = function(dateString) {
///
///一般的に使用される中国語の日付を解析し、日付オブジェクトを返します。
/// ///
//日付文字列。含まれる形式は次のとおりです: "xxxx(xx)-xx-xx xx:xx:xx"、"xxxx(xx).xx.xx xx:xx:xx"、
///"xxxx(xx)年xx" " 月 xx 日 xx 時 xx 分 xx 秒"
///
var regExp1 = /^d{4}-d{1,2}-d{1,2}( d { 1,2}:d{1,2}:d{1,2})?$/;
var regExp2 = /^d{4}.d{1,2}.d{1,2} ( d{1,2}:d{1,2}:d{1,2})?$/;
var regExp3 = /^d{4} 年 d{1,2} 月 d{1, 2 }日 (d{1,2} 時間 d{1,2} 分 d{1,2} 秒)?$/;
if (regExp1.test(dateString)) { }
else if ( regExp2 .test(dateString)) {
dateString = dateString.replace(/./g, "-");
}
else if (regExp3.test(dateString)) {
dateString = dateString .replace("年", "-").replace(
"月", "-").replace("日", "").replace("時", ":").replace( " 分", ":"
).replace("秒", "");
}
else {
throw "Date.parseCHS に渡されるパラメータ値の形式が正しくありません。有効な日付形式の文字列をパラメータとして渡してください。 ";
}
var date_time = dateString.split(" ");
var date_part = date_time[0].split("-");
var time_part = (date_time.length > 1 ? date_time[1].split(":") : "");
if (time_part == "") {
return new Date(date_part[ 0 ], date_part[1] - 1, date_part[2]);
}
else {
return new Date(date_part[0], date_part[1] - 1, date_part[2], time_part) [ 0], time_part[1], time_part[2]);
}
}
Date.prototype.add = function(datepart, number, returnNewObjec) {
///
///日付の加算と減算。
///returnNewObjec パラメータが true の場合、操作結果は新しい日付オブジェクトによって返され、元の日付オブジェクトは変更されません。
///それ以外の場合は、この時点で元の日付オブジェクトが返されます。 、元の日付オブジェクトは、
/// ///
です。 ///日付のプラス部分とマイナス部分:
///年、yy、yyyy--年
///四半期、qq、q--四半期
///月、mm、 m -- 月
///dayofyear, dy , y-- day
///Day, dd, d -- day
///週、週、ww -- 週
/ //時、hh -- 時
// /分、mi、n -- 分
///秒、ss、s -- 秒
///ミリ秒、ms -- ミリ秒
///
/ //
///加算または減算される量
//////
///新しい日付オブジェクトを返すかどうか。パラメータが true の場合は、新しい日付オブジェクトが返されます。そうでない場合は、現在の日付オブジェクトが返されます。
///
>///日付オブジェクトを返します
/// var regExp = /^d $/;
if (regExp.test(number)) {
number = parseInt; (数値);
else {数値 = 0; }
var tDate;
if (typeof (returnNewObjec) == "boolean" ) {
if (returnNewObjec == true) {
tDate = new Date(this);
else { tDate = this; }
}
else { tDate = this ; }
switch (datepart) {
case "year":
case "yy":
case "yyyy":
tDate.setFull Year(this.getFull Year() 数値 ) ;
break;
ケース "qq":
ケース "q":
tDate.setMonth(this.getMonth() (number * 3)); 🎜>break;
ケース "mm":
ケース "m":
tDate.setMonth(this.getMonth() 数値); >ケース "dayofyear":
ケース "dy":
ケース "y":
ケース "日":
ケース "dd":
ケース "d":
tDate .setDate(this.getDate() 数値);
break;
ケース "週":
ケース "ww":
tDate.setDate () (数値 * 7));
ケース "時間":
ケース "hh":
tDate.setHours(this.getHours() 数値); 🎜>ケース "分":
ケース "mi":
ケース "n":
tDate.setMinutes(this.getMinutes() number);
break
ケース "秒" :
ケース "ss":
ケース "s":
tDate.setSeconds(this.getSeconds() 数値);
ケース "ミリ秒":
ケース " ミリ秒":
tDate.setMilliseconds(this.getMilli秒() 数値);
break;
}
return tDate;
}
Date.prototype.dateDiff = function(datepart, beginDate ) {
///
///開始日と現在の日付の差、その差の絶対値を返します。
/// ///
///日付の加算部分と減算部分:
/ // 年、yy、yyyy -- 年
///四半期、qq、q --四半期
///月、mm、m -- 月
///年、日、y -- 日
///日、dd、d -- 日
///週、週、ww -- 週
///時、hh -- 時
///分、 mi 、 n -- 分
///秒、ss、s -- 秒
///ミリ秒、ms -- ミリ秒
////// < param name="beginDate" type="DateTime">
///日付を比較するには
///
///
///日付の差の絶対値を返します。
/// datepart = datepart.toLowerCase();
var yearDiff = Math.abs(this.getFull Year() - beginDate.getFull Year()); datepart) {
ケース "年":
ケース "yy":
ケース "yyyy":
return yearDiff;
ケース "四半期":
ケース "qq":
case "q":
var qDiff = 0;
switch (yearDiff) {
case 0:
qDiff = Math.abs(this.getSeason() - beginDate.getSeason()) ;
break;
ケース 1:
qDiff = (this.getSeason() - new Date(this.getFull Year(), 0, 1).getSeason())
(new Date(beginDate) .getFull Year(), 11, 31).getSeason() -
beginDate.getSeason()) 1;
break;
デフォルト:
qDiff = (this.getSeason() - new Date( this.getFull Year(), 0, 1).getSeason())
(new Date(beginDate.getFull Year(), 11, 31).getSeason() -
beginDate.getSeason()) 1 (yearDiff - 1) * 4;
break;
}
return qDiff;
case "mm":
case "m":
var monthDiff = 0;
switch (yearDiff) {
case 0:
monthDiff = Math.abs(this.getMonth() - beginDate.getMonth());
case 1:
monthDiff = (this.getMonth() - new Date(this.getFull Year(), 0, 1).getMonth())
(new Date(beginDate.getFull Year(), 11, 31).getMonth() -
beginDate.getMonth()) 1;
break;
デフォルト:
monthDiff = (this.getMonth() - new Date(this.getFull Year(), 0, 1).getMonth( ))
(new Date(beginDate.getFull Year(), 11, 31).getMonth() -
beginDate.getMonth()) 1 (yearDiff - 1) * 12;
return monthDiff;
case "dayofyear":
case "dy":
case "y":
case "day":
case "dd":
case "d":
return Math.abs((this.setHours(0, 0, 0, 0) - beginDate.setHours(0, 0, 0, 0)) / 1000 / 60 / 60 / 24);
ケース "週":
ケース "週":
ケース "ww":
var weekDiff = 0;
switch (yearDiff) {
ケース 0:
weekDiff = Math.abs(this.getWeek() - beginDate.getWeek());
break;
ケース 1:
weekDiff = (this.getWeek() - new Date(this.getFull Year(), 0, 1).getWeek())
(new Date(beginDate.getFull Year(), 11, 31).getWeek() -
beginDate.getWeek()) 1;デフォルト:
weekDiff = (this.getWeek() - new Date(this.getFull Year(), 0, 1).getWeek())
(new Date(beginDate.getFull Year(), 11, 31).getWeek() -
beginDate.getWeek()) 1;
var this Year = this.getFull Year();
for (var i = 1; i
weekDiff = new Date(this Year - i, 0, 1).getWeeksOf Year();
}
break;
return
case "hour":
case "hh":
return Math.abs((this - beginDate) / 1000 / 60 / 60);
case "分":
case "mi":
case "n":
return Math.abs((this - beginDate) / 1000 / 60);
ケース "秒":
ケース "ss":
ケース "s":
return Math.abs( (this - beginDate) / 1000);
case "ミリ秒":
case "ms":
return Math.abs(this - beginDate);
}
}
日付.prototype.getFirstWeekDays = function() {
///
///現在の日付が位置する年の最初の週の日数を取得します
///< ;/summary>
return (7 - new Date(this.getFull Year(), 0, 1).getDay()); //JS の月も 0 から始まり、0 は 1 月を意味します。
}
Date.prototype.getLastWeekDays = function(year) {
///
///現在の日付が含まれる年の最後の週の日数を取得します。 is located
// /
return (new Date(this.getFull Year(), 11, 31).getDay() 1) //JS の月も 0, 0 から始まります1 月という意味です。
}
Date.prototype.getWeeksOf Year = function() {
///
///現在の日付が位置する年の週番号を取得します
/// 概要>
return (Math.ceil((new Date(this.getFull Year(), 11, 31, 23, 59, 59) -
new Date(this.getFull Year(), 0, 1)) / 1000 / 60 / 60 / 24) -
this.getFirstWeekDays() - this.getLastWeekDays()) / 7 2;
}
Date.prototype.getSeason = function() {
// /
///現在の日付が属する年の四半期を取得します。 4 分の 1 の整数値を返します。
///概要>
var month = this.getMonth();
スイッチ (月) {
ケース 0:
ケース 1:
ケース 2:
return 1;
ケース 3:
ケース 4:
ケース 5:
return 2;
ケース 6:
ケース 7:
ケース 8:
return 3;
デフォルト:
戻り値 4;
}
}
Date.prototype.getWeek = function() {
///
///現在の前日の位置は一年中の最初の週です。整数値を返します。
///
var firstDate = new Date(this.getFull Year(), 0, 1);
var firstWeekDays = this.getFirstWeekDays();
var SecondWeekFirstDate = firstDate.add("dd", firstWeekDays, true);
var lastDate = new Date(this.getFull Year(), 11, 31);
var lastWeekDays = this.getLastWeekDays();
if (this.dateDiff("day", firstDate) < firstWeekDays) {
return 1;
}
else if (this.dateDiff("day", lastDate) < lastWeekDays) {
return this.getWeeksOf Year();
}
else {
return Math.ceil((this - SecondWeekFirstDate) / 1000 / 60 / 60 / 24 / 7) 1;
}
}