Skip to content

Instantly share code, notes, and snippets.

@nenjiru
Created October 15, 2010 03:32
Show Gist options
  • Save nenjiru/627560 to your computer and use it in GitHub Desktop.
Save nenjiru/627560 to your computer and use it in GitHub Desktop.
日付処理
////////////////////////////////////////////////////////////////////////////////
// Dateset
// 指定期間の日付/曜日の出力など
// Copyright 2010, Minoru Nakanou
// Licensed under the MIT licenses.
// http://www.opensource.org/licenses/mit-license.html
////////////////////////////////////////////////////////////////////////////////
(function() {
/**
* @private
* 日付フォーマット初期値
*/
var _template = "YEAR/MONTH/DATE/DAY";
/**
* @private
* 曜日フォーマット初期値
*/
var _format = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
/**
* 日付処理クラス
*
* @param {String} template 日付フォーマット
* @param {Array} format 曜日フォーマット
* @param {Boolean} zeroPadding ゼロパディング
*/
window.Dateset = function(template, format, zeroPadding) {
this.zeroPadding = (zeroPadding == undefined) ? true : zeroPadding;
this.template = template || _template;
this.format = format || _format;
}
/**
* Dateオブジェクトをフォーマット出力
*
* @param {Date} date Dateオブジェクト
*/
Dateset.prototype.print = function(date) {
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var w = this.format[date.getDay()];
if (this.zeroPadding) {
if (m < 10) m = "0"+ m;
if (d < 10) d = "0"+ d;
}
return this.template
.replace("YEAR", y)
.replace("MONTH", m)
.replace("DATE", d)
.replace("DAY", w);
}
/**
* 今日をフォーマットにそって出力
*
* @param {Number} target 正数でN日後、負数でN日前
*/
Dateset.prototype.today = function(target) {
var current = new Date();
if (target) {
current = new Date(
current.getFullYear(),
current.getMonth(),
current.getDate() + target
);
}
return this.print(current);
}
/**
* "/"区切りの日付フォーマットを Dateオブジェクトに変換
*
* @param {String} date "2010/05/01"
* @return {Date}
*/
Dateset.prototype.toDate = function(date) {
var adate = date.split("/");
return new Date(adate[0], adate[1]-1, adate[2], 00, 00, 00);
}
/**
* 指定期間の日数
*
* @param {String} start 開始日 "2010/05/01"
* @param {String} finish 終了日 "2010/05/31"
* @param {Boolean} diff 当日を含めるか
* @return {Number} 日数
*/
Dateset.prototype.span = function(start, finish, diff) {
var start = this.toDate(start);
var finish = this.toDate(finish);
var diff = (diff == undefined) ? true : diff;
var span = (finish.getTime() - start.getTime()) / 86400000;
if (diff) {
if (span < 0) --span;
else ++span;
}
return span;
}
/**
* 指定日から経過日
*
* @param {String} start 開始日 "2010/05/01"
* @param {Number} target 終了日 正数でN日後、負数でN日前
* @return {String} 日付
*/
Dateset.prototype.after = function(start, target) {
var s = this.toDate(start);
var after = new Date(s.getFullYear(), s.getMonth(), s.getDate()+target);
return this.print(after);
}
/**
* 日付出力
* リストの終了を指定する第2引数は String|Number どちらでも可能
*
* @param {String} start 開始日 "2010/05/01"
* @param {String} finish 終了日 "2010/05/31"
* @return {Array} 整形日付の配列
*/
Dateset.prototype.list = function(start, finish) {
var list = []
var current = this.toDate(start);
if (typeof finish == "string") finish = this.span(start, finish, true);
for (var i=0; i<finish; i++) {
list.push(
this.print(current)
);
current = new Date(
current.getFullYear(),
current.getMonth(),
current.getDate() + 1
);
}
return list;
}
})();
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Dateset</title>
<script type="text/javascript" src="./dateset.js"></script>
</head>
<body>
<script type="text/javascript">
var date = new Dateset();
var today = date.today();
var yesterday = date.today(-1);
var tomorrow = date.today(1);
console.log("今日:", today);
console.log("昨日:", yesterday);
console.log("明日:", tomorrow);
console.log("Date.parse:"+ yesterday, Date.parse(yesterday));
date.format = ["日", "月", "火", "水", "木", "金", "土"];
date.zeroPadding = false;
console.log("フォーマット変更:", date.format);
today = date.today();
yesterday = date.today(-1);
tomorrow = date.today(1);
console.log("今日:", today);
console.log("昨日:", yesterday);
console.log("明日:", tomorrow);
var toDate = date.toDate(yesterday);
console.log("toDate:", toDate.getTime());
var span = date.span("2010/05/01", "2010/05/15");
console.log("期間:", span);
var list = date.list("2010/05/01", "2010/05/10");
console.log("リスト:", list);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment