/TmplApp/TmplApp/root/js/dateformat.js
https://github.com/jyun16/wiz-perl · JavaScript · 310 lines · 239 code · 18 blank · 53 comment · 98 complexity · c2400c5729278e9a14e6bbc6676cfc12 MD5 · raw file
- /*
- --------------------------------------------------------
- dateformat.js - Simple date formatter
- Version 1.1 (Update 2008/04/02)
-
- Copyright (c) 2007-2008 onozaty (http://www.enjoyxstudy.com)
-
- Released under an MIT-style license.
-
- For details, see the web site:
- http://www.enjoyxstudy.com/javascript/dateformat/
-
- --------------------------------------------------------
- patterns
- y : Year ex. "yyyy" -> "2007", "yy" -> "07"
- M : Month ex. "MM" -> "05" "12", "M" -> "5" "12"
- d : Day ex. "dd" -> "09" "30", "d" -> "9" "30"
- H : Hour (0-23) ex. "HH" -> "00" "23", "H" -> "0" "23"
- m : Minute ex. "mm" -> "01" "59", "m" -> "1" "59"
- s : Second ex. "ss" -> "00" "59", "H" -> "0" "59"
- S : Millisecond ex. "SSS" -> "000" "012" "999",
- "SS" -> "00" "12" "999", "S" -> "0" "12" "999"
-
- Text can be quoted using single quotes (') to avoid interpretation.
- "''" represents a single quote.
-
-
- Useing..
-
- var fmt = new DateFormat("yyyy/MM/dd HH:mm:ss SSS");
-
- var str = fmt.format(new Date()); // "2007/05/10 12:21:19 002"
- var date = fmt.parse("2007/05/10 12:21:19 002"); // return Date object
-
- --------------------------------------------------------
- */
-
- var DateFormat = function(pattern) {
- this._init(pattern);
- };
-
- DateFormat.prototype = {
- _init: function(pattern) {
-
- this.pattern = pattern;
- this._patterns = [];
-
- for (var i = 0; i < pattern.length; i++) {
- var ch = pattern.charAt(i);
- if (this._patterns.length == 0) {
- this._patterns[0] = ch;
- } else {
- var index = this._patterns.length - 1;
- if (this._patterns[index].charAt(0) == "'") {
- if (this._patterns[index].length == 1
- || this._patterns[index].charAt(this._patterns[index].length - 1) != "'") {
- this._patterns[index] += ch;
- } else {
- this._patterns[index + 1] = ch;
- }
- } else if (this._patterns[index].charAt(0) == ch) {
- this._patterns[index] += ch;
- } else {
- this._patterns[index + 1] = ch;
- }
- }
- }
- },
-
- format: function(date) {
-
- var result = [];
- for (var i = 0; i < this._patterns.length; i++) {
- result[i] = this._formatWord(date, this._patterns[i]);
- }
- return result.join('');
- },
- _formatWord: function(date, pattern) {
-
- var formatter = this._formatter[pattern.charAt(0)];
- if (formatter) {
- return formatter.apply(this, [date, pattern]);
- } else {
- return pattern;
- }
- },
- _formatter: {
- "y": function(date, pattern) {
- // Year
- var year = String(date.getFullYear());
- if (pattern.length <= 2) {
- year = year.substring(2, 4);
- } else {
- year = this._zeroPadding(year, pattern.length);
- }
- return year;
- },
- "M": function(date, pattern) {
- // Month in year
- return this._zeroPadding(String(date.getMonth() + 1), pattern.length);
- },
- "d": function(date, pattern) {
- // Day in month
- return this._zeroPadding(String(date.getDate()), pattern.length);
- },
- "H": function(date, pattern) {
- // Hour in day (0-23)
- return this._zeroPadding(String(date.getHours()), pattern.length);
- },
- "m": function(date, pattern) {
- // Minute in hour
- return this._zeroPadding(String(date.getMinutes()), pattern.length);
- },
- "s": function(date, pattern) {
- // Second in minute
- return this._zeroPadding(String(date.getSeconds()), pattern.length);
- },
- "S": function(date, pattern) {
- // Millisecond
- return this._zeroPadding(String(date.getMilliseconds()), pattern.length);
- },
- "'": function(date, pattern) {
- // escape
- if (pattern == "''") {
- return "'";
- } else {
- return pattern.replace(/'/g, '');
- }
- }
- },
-
- _zeroPadding: function(str, length) {
- if (str.length >= length) {
- return str;
- }
-
- return new Array(length - str.length + 1).join("0") + str;
- },
-
-
- /// Parser ///
- parse: function(text) {
-
- if (typeof text != 'string' || text == '') return null;
-
- var result = {year: 1970, month: 1, day: 1, hour: 0, min: 0, sec: 0, msec: 0};
-
- for (var i = 0; i < this._patterns.length; i++) {
- if (text == '') return null; // parse error!!
- text = this._parseWord(text, this._patterns[i], result);
- if (text === null) return null; // parse error!!
- }
- if (text != '') return null; // parse error!!
-
- return new Date(
- result.year,
- result.month - 1,
- result.day,
- result.hour,
- result.min,
- result.sec,
- result.msec);
- },
- _parseWord: function(text, pattern, result) {
-
- var parser = this._parser[pattern.charAt(0)];
- if (parser) {
- return parser.apply(this, [text, pattern, result]);
- } else {
- if (text.indexOf(pattern) != 0) {
- return null;
- } else {
- return text.substring(pattern.length);
- }
- }
- },
- _parser: {
- "y": function(text, pattern, result) {
- // Year
- var year;
- if (pattern.length <= 2) {
- year = text.substring(0, 2);
- year = year < 70 ? '20' + year : '19' + year;
- text = text.substring(2);
- } else {
- var length = (pattern.length == 3) ? 4 : pattern.length;
- year = text.substring(0, length);
- text = text.substring(length);
- }
- if (!this._isNumber(year)) return null; // error
- result.year = parseInt(year, 10);
- return text;
- },
- "M": function(text, pattern, result) {
- // Month in year
- var month;
- if (pattern.length == 1 && text.length > 1
- && text.substring(0, 2).match(/1[0-2]/) != null) {
- month = text.substring(0, 2);
- text = text.substring(2);
- } else {
- month = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(month)) return null; // error
- result.month = parseInt(month, 10);
- return text;
- },
- "d": function(text, pattern, result) {
- // Day in month
- var day;
- if (pattern.length == 1 && text.length > 1
- && text.substring(0, 2).match(/1[0-9]|2[0-9]|3[0-1]/) != null) {
- day = text.substring(0, 2);
- text = text.substring(2);
- } else {
- day = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(day)) return null; // error
- result.day = parseInt(day, 10);
- return text;
- },
- "H": function(text, pattern, result) {
- // Hour in day (0-23)
- var hour;
- if (pattern.length == 1 && text.length > 1
- && text.substring(0, 2).match(/1[0-9]|2[0-3]/) != null) {
- hour = text.substring(0, 2);
- text = text.substring(2);
- } else {
- hour = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(hour)) return null; // error
- result.hour = parseInt(hour, 10);
- return text;
- },
- "m": function(text, pattern, result) {
- // Minute in hour
- var min;
- if (pattern.length == 1 && text.length > 1
- && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
- min = text.substring(0, 2);
- text = text.substring(2);
- } else {
- min = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(min)) return null; // error
- result.min = parseInt(min, 10);
- return text;
- },
- "s": function(text, pattern, result) {
- // Second in minute
- var sec;
- if (pattern.length == 1 && text.length > 1
- && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
- sec = text.substring(0, 2);
- text = text.substring(2);
- } else {
- sec = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(sec)) return null; // error
- result.sec = parseInt(sec, 10);
- return text;
- },
- "S": function(text, pattern, result) {
- // Millimsecond
- var msec;
- if (pattern.length == 1 || pattern.length == 2) {
- if (text.length > 2 && text.substring(0, 3).match(/[1-9][0-9][0-9]/) != null) {
- msec = text.substring(0, 3);
- text = text.substring(3);
- } else if (text.length > 1 && text.substring(0, 2).match(/[1-9][0-9]/) != null) {
- msec = text.substring(0, 2);
- text = text.substring(2);
- } else {
- msec = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- } else {
- msec = text.substring(0, pattern.length);
- text = text.substring(pattern.length);
- }
- if (!this._isNumber(msec)) return null; // error
- result.msec = parseInt(msec, 10);
- return text;
- },
- "'": function(text, pattern, result) {
- // escape
- if (pattern == "''") {
- pattern = "'";
- } else {
- pattern = pattern.replace(/'/g, '');
- }
- if (text.indexOf(pattern) != 0) {
- return null; // error
- } else {
- return text.substring(pattern.length);
- }
- }
- },
-
- _isNumber: function(str) {
- return /^[0-9]*$/.test(str);
- }
- }