[
  {
    "path": "README.md",
    "content": "# dateformat.js\n\n> **dateformat.js** 是一个非常简洁、轻量级、不到 `5kb` 的很简洁的 Javascript 库，\n它是一个时间的处理工具类。\n\n - 支持常用的时间格式化\n - 得到当前星期，时间对比大小，是否为闰年\n - 增加日期，增加月份，增加年份等等\n - 支持自动实时更新；\n - 支持浏览器script方式；\n - 测试用例完善，执行良好；\n\n\n\n# 使用方法\n\n\n**1. 引入 dateformat.js**\n\n\n通过 `script` 标签引入到html文件中，会生成一个全局变量 `DateFormat`.\n\n```js\n<script src=\"dateformat.js\"></script>\n```\n\n当然你还可以在通过 import 引入\n```\nimport dateformat form '...自己的路径';\n```\n\n最后该项目也上传到npm上，你可以通过\n```\n//安装\nnpm install dateformat-util  \n```\n```\n//使用\nvar dateformat = require('dateformat-util');\ndateformat.format(new Date());\n\n```\n\n\n\n\n\n**3. 使用 `dateformat` 类**\n\n直接调用方法即可\n```js\nDateFormat.format(new Date(), 'yyyy-MM-dd hh:mm:ss');\n```\n\n\n# 具体方法\n\n\n**1. format(date, fmt)**\n\n`format` 是将 Date类型的时间进行格式化的工具方法：\n\n```js\nDateFormat.format(new Date()) //不传 fmt，则默认为 yyyy-MM-dd hh:mm:ss ;\nDateFormat.format(new Date(), 'yyyy-MM-dd hh:mm:ss');\nDateFormat.format(new Date(), 'yyyy/MM/dd hh:mm:ss');\nDateFormat.format(new Date(), 'yyyy/MM/dd');\n...\n```\n**2. formatToDate(dateStr)**\n\n`formatToDate` 是将 字符串类型的时间 转化成 Date 类型的工具方法：\n\n```\nDateFormat.formatToDate('2017-04-18 12:12:12');\nDateFormat.formatToDate('2017/04/18 12:12:12');\n...\n```\n\n**3. getDateStart(date)**\n\n`getDateStart` 是得到一天的开始，工作中会碰到这种需要得到某一天的开始或结束的时间点。\n```js\nDateFormat.getDateStart(new Date());  //今天是4.18, 那返回的是今天 00:00:00的Date类型\n\n```\n如果想返回字符串类型，可以使用 `getDateStartStr(date, fmt)` 方法，fmt非必传\n```js\nDateFormat.getDateStartStr(new Date(), 'yyyy-MM-dd hh:mm:ss'); //返回 2017-04-18 00:00:00\n```\n\n**4. getDateEnd(date)**\n\n`getDateEnd` 是得到一天的结束\n\n```js\nDateFormat.getDateEnd(new Date());  //今天是4.18, 那返回的是今天 23:59:59的Date类型\n\n```\n如果想返回字符串类型，可以使用 `getDateEndStr(date, fmt)` 方法，fmt非必传\n```js\nDateFormat.getDateEndStr(new Date(), 'yyyy-MM-dd hh:mm:ss'); //返回 2017-04-18 23:59:59\n```\n\n**5. compareDate(d1, d2)**\n\n`compareDate` 比较两个日期的大小\n返回 1 , 则 d1 > d2\n返回 0 , 则 d1 == d2\n返回 -1, 则 d1 < d2\n\n```js\nDateFormat.compareDate(new Date(), new Date()); \n```\n\n**6. getWeek(date, type)**\n\n`getWeek` 得到一个日期是星期几\n\n```js\nDateFormat.getWeek(new Date());  //type非必传，默认返回 '星期 X'的格式\nDateFormat.getWeek(new Date(), DateFormat.WEEKTYPE.US_DAYNAME); // Monday\n\n\n/*\ntype 枚举如下：\n\nDateFormat.WEEKTYPE.ZH_DAYNAME :      星期一\nDateFormat.WEEKTYPE.ZH_SHORTDAYNAME:  周一\nDateFormat.WEEKTYPE.US_DAYNAME：      Monday\nDateFormat.WEEKTYPE.US_SDAYNAME：     Mon\n*/\n\n```\n\n**7. addDay(date, num)**\n\n增加系列：\n\n```\naddDay(date, num) \naddDayStr(dateStr, num) \naddMonth(date, num)\naddMonthStr(dateStr, num)\naddYear(date, num)\naddYearStr(dateStr, num)\n\n```\n\n使用起来很简单，今天是 2017.04.18\n\n```\nDateFormat.addDay(new Date(), 3);   //返回是三天后的  Date类型\nDateFormat.addDayStr('2017-04-18 12:12:12', 3) // 返回 Fri Apr 21 2017 12:12:12 GMT+0800 (中国标准时间)\n\n// 其他 month year的方式同上\n```\n\n"
  },
  {
    "path": "dateformat-es6.js",
    "content": "/**\n * Created by admin on 2017/4/18.\n */\n\nexport default function dateformat() {\n};\n\n\n/**\n * 格式化时间\n * @param date\n * @param fmt\n * @returns {*}\n */\ndateformat.format = function (date, fmt) {\n  var o = {\n    'M+': date.getMonth() + 1, //月份\n    'd+': date.getDate(), //日\n    'h+': date.getHours(), //小时\n    'm+': date.getMinutes(), //分\n    's+': date.getSeconds(), //秒\n    'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n    'S': date.getMilliseconds() //毫秒\n  };\n  if (!this.isNotEmpty(fmt)) {\n    fmt = 'yyyy-MM-dd hh:mm:ss';\n  }\n  if (/(y+)/.test(fmt)) {\n    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));\n  }\n  for (var k in o) {\n    if (new RegExp('(' + k + ')').test(fmt)) {\n      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));\n    }\n  }\n  return fmt;\n};\n\n\ndateformat.formatToDate = function (dateStr) {\n  if (this.isNotEmpty(dateStr)) {\n    return new Date(Date.parse(dateStr.replace(/-/g, '/')));\n  }\n  return '';\n};\n\ndateformat.getDateStart = function (date) {\n  var fmt = 'yyyy-MM-dd';\n  var dateStartStr = this.getDateStartStr(date, fmt);\n  var startTime = new Date(Date.parse(dateStartStr));\n  return startTime;\n};\n\ndateformat.getDateStartStr = function (date, fmt) {\n  if (typeof fmt == 'undefined') {\n    fmt = 'yyyy-MM-dd';\n  }\n  var dateStr = this.format(date, fmt);\n  dateStr += ' 00:00:00';\n  return dateStr;\n};\n\ndateformat.getDateEnd = function (date) {\n  var fmt = 'yyyy-MM-dd';\n  var dateEndStr = this.getDateEndStr(date, fmt);\n  var endTime = new Date(Date.parse(dateEndStr));\n  return endTime;\n};\n\ndateformat.getDateEndStr = function (date, fmt) {\n  if (typeof fmt == 'undefined') {\n    fmt = 'yyyy-MM-dd';\n  }\n  var endStr = this.format(date, fmt);\n  endStr += ' 23:59:59';\n  return endStr;\n};\n\ndateformat.compareDate = function (d1, d2) {\n  if (d1 && d2) {\n    if (d1.getTime() > d2.getTime()) {\n      return 1;\n    } else if (d1.getTime() == d2.getTime()) {\n      return 0;\n    } else if (d1.getTime() < d2.getTime()) {\n      return -1;\n    }\n  }\n};\n\ndateformat.isLeapYear = function (date) {\n  if (date instanceof Date) {\n    return (0 == date.getYear() % 4 && ((date.getYear() % 100 != 0) || (date.getYear() % 400 == 0)));\n  }\n  console.warn('argument format is wrong');\n  return false;\n};\n\ndateformat.isValidDate = function (dateStr) {\n  if (this.isNotEmpty(dateStr)) {\n    var r = dateStr.match(/^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/);\n    if (r == null) {\n      return false;\n    }\n    var d = new Date(r[1], r[3] - 1, r[4]);\n    var num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);\n    return (num != 0);\n  }\n};\n\ndateformat.addDay = function (date, dayNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(dayNum) && date instanceof Date && typeof dayNum == 'number') {\n    date.setDate(date.getDate() + dayNum);\n  } else {\n    console.warn('date or dayNum format wrong');\n  }\n  return date;\n};\n\ndateformat.addDayStr = function (dateStr, dayNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(dayNum) && typeof dayNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setDate(date.getDate() + dayNum);\n  } else {\n    console.warn('dateStr or dayNum format wrong');\n  }\n  return date;\n};\n\ndateformat.addMonth = function (date, monthNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(monthNum) && date instanceof Date && typeof monthNum == 'number') {\n    date.setDate(1); // 兼容 31号的特殊情况\n    date.setMonth(date.getMonth() + monthNum);\n  } else {\n    console.warn('date or monthNum format wrong');\n  }\n  return date;\n};\n\ndateformat.addMonthStr = function (dateStr, monthNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(monthNum) && typeof monthNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setDate(1); // 兼容 31号的特殊情况\n    date.setMonth(date.getMonth() + monthNum);\n  } else {\n    console.warn('date or monthNum format wrong');\n  }\n  return date;\n};\n\ndateformat.addYear = function (date, yearNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(yearNum) && date instanceof Date && typeof yearNum == 'number') {\n    date.setYear(date.getFullYear() + yearNum);\n  } else {\n    console.warn('date or yearNum format wrong');\n  }\n  return date;\n};\n\ndateformat.addYearStr = function (dateStr, yearNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(yearNum) && typeof yearNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setYear(date.getFullYear() + yearNum);\n  } else {\n    console.warn('date or yearNum format wrong');\n  }\n  return date;\n};\n\ndateformat.isNotEmpty = function (str) {\n  if (str != '' && str != null && typeof str != 'undefined') {\n    return true;\n  }\n  console.warn('argument format is wrong');\n  return false;\n};\n\ndateformat.getWeek = function (date, type) {\n  if (date) {\n    if (!this.isNotEmpty(type)) {\n      type = 0;\n    }\n    var index = date.getDay();\n    var dateStr = '';\n    switch (type) {\n      case this.WEEKTYPE.ZH_DAYNAME:\n        dateStr = this._options.ZH.dayNames[index];\n        break;\n      case this.WEEKTYPE.ZH_SDAYNAME:\n        dateStr = this._options.ZH.shortDayNames[index];\n        break;\n      case this.WEEKTYPE.US_DAYNAME:\n        dateStr = this._options.US.dayNames[index];\n        break;\n      case this.WEEKTYPE.US_SDAYNAME:\n        dateStr = this._options.US.shortDayNames[index];\n        break;\n    }\n    return dateStr;\n  }\n};\n\ndateformat.WEEKTYPE = {\n  ZH_DAYNAME: 0,\n  ZH_SDAYNAME: 1,\n  US_DAYNAME: 2,\n  US_SDAYNAME: 3,\n};\n\ndateformat._options = {\n  ZH: {\n    dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    shortDayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n    monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    shortMonthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n  },\n  US: {\n    dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    shortDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n  }\n};\n\n"
  },
  {
    "path": "dateformat-min.js",
    "content": "(function(){var _options={ZH:{dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],shortDayNames:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],shortMonthNames:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},US:{dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]}};var _date_format_api={format:function(date,fmt){var o={\"M+\":date.getMonth()+1,\"d+\":date.getDate(),\"h+\":date.getHours(),\"m+\":date.getMinutes(),\"s+\":date.getSeconds(),\"q+\":Math.floor((date.getMonth()+3)/3),\"S\":date.getMilliseconds()};if(!this.isNotEmpty(fmt)){fmt=\"yyyy-MM-dd hh:mm:ss\"}if(/(y+)/.test(fmt)){fmt=fmt.replace(RegExp.$1,(date.getFullYear()+\"\").substr(4-RegExp.$1.length))}for(var k in o){if(new RegExp(\"(\"+k+\")\").test(fmt)){fmt=fmt.replace(RegExp.$1,(RegExp.$1.length==1)?(o[k]):((\"00\"+o[k]).substr((\"\"+o[k]).length)))}}return fmt},formatToDate:function(dateStr){if(this.isNotEmpty(dateStr)){return new Date(Date.parse(dateStr.replace(/-/g,\"/\")))}return\"\"},getDateStart:function(date){var fmt=\"yyyy-MM-dd\";var dateStartStr=this.getDateStartStr(date,fmt);var startTime=new Date(Date.parse(dateStartStr));return startTime},getDateStartStr:function(date,fmt){if(typeof fmt==\"undefined\"){fmt=\"yyyy-MM-dd\"}var dateStr=this.format(date,fmt);dateStr+=\" 00:00:00\";return dateStr},getDateEnd:function(date){var fmt=\"yyyy-MM-dd\";var dateEndStr=this.getDateEndStr(date,fmt);var endTime=new Date(Date.parse(dateEndStr));return endTime},getDateEndStr:function(date,fmt){if(typeof fmt==\"undefined\"){fmt=\"yyyy-MM-dd\"}var endStr=this.format(date,fmt);endStr+=\" 23:59:59\";return endStr},compareDate:function(d1,d2){if(d1&&d2){if(d1.getTime()>d2.getTime()){return 1}else{if(d1.getTime()==d2.getTime()){return 0}else{if(d1.getTime()<d2.getTime()){return -1}}}}},getWeek:function(date,type){if(date){if(!this.isNotEmpty(type)){type=0}var index=date.getDay();var dateStr=\"\";switch(type){case this.WEEKTYPE.ZH_DAYNAME:dateStr=_options.ZH.dayNames[index];break;case this.WEEKTYPE.ZH_SDAYNAME:dateStr=_options.ZH.shortDayNames[index];break;case this.WEEKTYPE.US_DAYNAME:dateStr=_options.US.dayNames[index];break;case this.WEEKTYPE.US_SDAYNAME:dateStr=_options.US.shortDayNames[index];break}return dateStr}},isLeapYear:function(date){if(date instanceof Date){return(0==date.getYear()%4&&((date.getYear()%100!=0)||(date.getYear()%400==0)))}console.warn(\"argument format is wrong\");return false},isValidDate:function(dateStr){if(this.isNotEmpty(dateStr)){var r=dateStr.match(/^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/);if(r==null){return false}var d=new Date(r[1],r[3]-1,r[4]);var num=(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);return(num!=0)}},addDay:function(date,dayNum){if(this.isNotEmpty(date)&&this.isNotEmpty(dayNum)&&date instanceof Date&&typeof dayNum==\"number\"){date.setDate(date.getDate()+dayNum)}else{console.warn(\"date or dayNum format wrong\")}return date},addDayStr:function(dateStr,dayNum){var date=\"\";if(this.isNotEmpty(dateStr)&&this.isNotEmpty(dayNum)&&typeof dayNum==\"number\"){date=this.formatToDate(dateStr);date.setDate(date.getDate()+dayNum)}else{console.warn(\"dateStr or dayNum format wrong\")}return date},addMonth:function(date,monthNum){if(this.isNotEmpty(date)&&this.isNotEmpty(monthNum)&&date instanceof Date&&typeof monthNum==\"number\"){date.setMonth(date.getMonth()+monthNum)}else{console.warn(\"date or monthNum format wrong\")}return date},addMonthStr:function(dateStr,monthNum){var date=\"\";if(this.isNotEmpty(dateStr)&&this.isNotEmpty(monthNum)&&typeof monthNum==\"number\"){date=this.formatToDate(dateStr);date.setMonth(date.getMonth()+monthNum)}else{console.warn(\"date or monthNum format wrong\")}return date},addYear:function(date,yearNum){if(this.isNotEmpty(date)&&this.isNotEmpty(yearNum)&&date instanceof Date&&typeof yearNum==\"number\"){date.setYear(date.getFullYear()+yearNum)}else{console.warn(\"date or yearNum format wrong\")}return date},addYearStr:function(dateStr,yearNum){var date=\"\";if(this.isNotEmpty(dateStr)&&this.isNotEmpty(yearNum)&&typeof yearNum==\"number\"){date=this.formatToDate(dateStr);date.setYear(date.getFullYear()+yearNum)}else{console.warn(\"date or yearNum format wrong\")}return date},isNotEmpty:function(str){if(str!=\"\"&&str!=null&&typeof str!=\"undefined\"){return true}console.warn(\"argument format is wrong\");return false},WEEKTYPE:{ZH_DAYNAME:0,ZH_SDAYNAME:1,US_DAYNAME:2,US_SDAYNAME:3,}};this.DateFormat=_date_format_api})();"
  },
  {
    "path": "dateformat-npm.js",
    "content": "/**\n * Created by admin on 2017/4/19.\n */\n/**\n * Created by admin on 2017/4/18.\n */\n\n\n/**\n * 格式化时间\n * @param date\n * @param fmt\n * @returns {*}\n */\nexports.format = function (date, fmt) {\n  var o = {\n    'M+': date.getMonth() + 1, //月份\n    'd+': date.getDate(), //日\n    'h+': date.getHours(), //小时\n    'm+': date.getMinutes(), //分\n    's+': date.getSeconds(), //秒\n    'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n    'S': date.getMilliseconds() //毫秒\n  };\n  if (!this.isNotEmpty(fmt)) {\n    fmt = 'yyyy-MM-dd hh:mm:ss';\n  }\n  if (/(y+)/.test(fmt)) {\n    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));\n  }\n  for (var k in o) {\n    if (new RegExp('(' + k + ')').test(fmt)) {\n      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));\n    }\n  }\n  return fmt;\n};\n\n/**\n * 将字符串时间转Date\n * @param dateStr\n * @returns {*}\n */\nexports.formatToDate = function (dateStr) {\n  if (this.isNotEmpty(dateStr)) {\n    return new Date(Date.parse(dateStr.replace(/-/g, '/')));\n  }\n  return '';\n};\n\n/**\n * 得到一天的开始,Date\n * @param date\n * @returns {Date}\n */\nexports.getDateStart = function (date) {\n  var fmt = 'yyyy-MM-dd';\n  var dateStartStr = this.getDateStartStr(date, fmt);\n  var startTime = new Date(Date.parse(dateStartStr));\n  return startTime;\n};\n\n/**\n *得到一天的开始,字符串\n * @param date\n * @param fmt\n * @returns {*}\n */\nexports.getDateStartStr = function (date, fmt) {\n  if (typeof fmt == 'undefined') {\n    fmt = 'yyyy-MM-dd';\n  }\n  var dateStr = this.format(date, fmt);\n  dateStr += ' 00:00:00';\n  return dateStr;\n};\n\n/**\n * 得到一天的结束， Date\n * @param date\n * @returns {Date}\n */\nexports.getDateEnd = function (date) {\n  var fmt = 'yyyy-MM-dd';\n  var dateEndStr = this.getDateEndStr(date, fmt);\n  var endTime = new Date(Date.parse(dateEndStr));\n  return endTime;\n};\n\n/**\n * 得到一天的结束 字符串\n * @param date\n * @param fmt\n * @returns {*}\n */\nexports.getDateEndStr = function (date, fmt) {\n  if (typeof fmt == 'undefined') {\n    fmt = 'yyyy-MM-dd';\n  }\n  var endStr = this.format(date, fmt);\n  endStr += ' 23:59:59';\n  return endStr;\n};\n\n/**\n * 比较日期\n * @param d1\n * @param d2\n * @returns {number}\n */\nexports.compareDate = function (d1, d2) {\n  if (d1 && d2) {\n    if (d1.getTime() > d2.getTime()) {\n      return 1;\n    } else if (d1.getTime() == d2.getTime()) {\n      return 0;\n    } else if (d1.getTime() < d2.getTime()) {\n      return -1;\n    }\n  }\n};\n\n/**\n * 是否为闰年\n * @param date\n * @returns {boolean}\n */\nexports.isLeapYear = function (date) {\n  if (date instanceof Date) {\n    return (0 == date.getYear() % 4 && ((date.getYear() % 100 != 0) || (date.getYear() % 400 == 0)));\n  }\n  console.warn('argument format is wrong');\n  return false;\n};\n\n/**\n * 是否为正确时间的字符串\n * @param dateStr\n * @returns {boolean}\n */\nexports.isValidDate = function (dateStr) {\n  if (this.isNotEmpty(dateStr)) {\n    var r = dateStr.match(/^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/);\n    if (r == null) {\n      return false;\n    }\n    var d = new Date(r[1], r[3] - 1, r[4]);\n    var num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);\n    return (num != 0);\n  }\n};\n\n/**\n * 增加天数 Date\n * @param date\n * @param dayNum\n * @returns {*}\n */\nexports.addDay = function (date, dayNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(dayNum) && date instanceof Date && typeof dayNum == 'number') {\n    date.setDate(date.getDate() + dayNum);\n  } else {\n    console.warn('date or dayNum format wrong');\n  }\n  return date;\n};\n\n/**\n * d增加天数 字符串\n * @param dateStr\n * @param dayNum\n * @returns {string}\n */\nexports.addDayStr = function (dateStr, dayNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(dayNum) && typeof dayNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setDate(date.getDate() + dayNum);\n  } else {\n    console.warn('dateStr or dayNum format wrong');\n  }\n  return date;\n};\n\n/**\n * 增加月份 Date\n * @param date\n * @param monthNum\n * @returns {*}\n */\nexports.addMonth = function (date, monthNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(monthNum) && date instanceof Date && typeof monthNum == 'number') {\n    date.setDate(1); // 兼容 31号的特殊情况\n    date.setMonth(date.getMonth() + monthNum);\n  } else {\n    console.warn('date or monthNum format wrong');\n  }\n  return date;\n};\n\n/**\n * 增加月份 字符串\n * @param dateStr\n * @param monthNum\n * @returns {string}\n */\nexports.addMonthStr = function (dateStr, monthNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(monthNum) && typeof monthNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setDate(1); // 兼容 31号的特殊情况\n    date.setMonth(date.getMonth() + monthNum);\n  } else {\n    console.warn('date or monthNum format wrong');\n  }\n  return date;\n};\n\n/**\n * 增加年份 Date\n * @param date\n * @param yearNum\n * @returns {*}\n */\nexports.addYear = function (date, yearNum) {\n  if (this.isNotEmpty(date) && this.isNotEmpty(yearNum) && date instanceof Date && typeof yearNum == 'number') {\n    date.setYear(date.getFullYear() + yearNum);\n  } else {\n    console.warn('date or yearNum format wrong');\n  }\n  return date;\n};\n\n/**\n * 增加年份 字符串\n * @param dateStr\n * @param yearNum\n * @returns {string}\n */\nexports.addYearStr = function (dateStr, yearNum) {\n  var date = '';\n  if (this.isNotEmpty(dateStr) && this.isNotEmpty(yearNum) && typeof yearNum == 'number') {\n    date = this.formatToDate(dateStr);\n    date.setYear(date.getFullYear() + yearNum);\n  } else {\n    console.warn('date or yearNum format wrong');\n  }\n  return date;\n};\n\n/**\n *  是否为空\n * @param str\n * @returns {boolean}\n */\nexports.isNotEmpty = function (str) {\n  if (str != '' && str != null && typeof str != 'undefined') {\n    return true;\n  }\n  console.warn('argument format is wrong');\n  return false;\n};\n\nWEEKTYPE = {\n  ZH_DAYNAME: 0,\n  ZH_SDAYNAME: 1,\n  US_DAYNAME: 2,\n  US_SDAYNAME: 3,\n};\n\n_options = {\n  ZH: {\n    dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    shortDayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n    monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    shortMonthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n  },\n  US: {\n    dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    shortDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n  }\n};\n\n/**\n * 得到今天是星期几\n * @param date\n * @param type\n * @returns {string}\n */\nexports.getWeek = function (date, type) {\n  if (date) {\n    if (!this.isNotEmpty(type)) {\n      type = 0;\n    }\n    var index = date.getDay();\n    var dateStr = '';\n    switch (type) {\n      case WEEKTYPE.ZH_DAYNAME:\n        dateStr = _options.ZH.dayNames[index];\n        break;\n      case WEEKTYPE.ZH_SDAYNAME:\n        dateStr = _options.ZH.shortDayNames[index];\n        break;\n      case WEEKTYPE.US_DAYNAME:\n        dateStr = _options.US.dayNames[index];\n        break;\n      case WEEKTYPE.US_SDAYNAME:\n        dateStr = _options.US.shortDayNames[index];\n        break;\n    }\n    return dateStr;\n  }\n};\n\n"
  },
  {
    "path": "dateformat.js",
    "content": "/**\n * autor: xuxiao , zubaoshan\n */\n(function () {\n  //定义一些默认参数\n  var _options = {\n    ZH: {\n      dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n      shortDayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n      monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n      shortMonthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n    },\n    US: {\n      dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n      shortDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n      monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n      shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n    }\n  }\n\n  //定义一些api\n  var _date_format_api = {\n\n\t\t/**\n\t\t * 格式化时间\n\t\t * @param date\n\t\t * @param fmt\n\t\t * @returns {*}\n\t\t */\n    format: function (date, fmt) {\n      var o = {\n        'M+': date.getMonth() + 1, //月份\n        'd+': date.getDate(), //日\n        'h+': date.getHours(), //小时\n        'm+': date.getMinutes(), //分\n        's+': date.getSeconds(), //秒\n        'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n        'S': date.getMilliseconds() //毫秒\n      };\n      if (!this.isNotEmpty(fmt)) {\n        fmt = 'yyyy-MM-dd hh:mm:ss';\n      }\n      if (/(y+)/.test(fmt)) {\n        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));\n      }\n      for (var k in o) {\n        if (new RegExp('(' + k + ')').test(fmt)) {\n          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));\n        }\n      }\n      return fmt;\n    },\n\n    formatToDate: function (dateStr) {\n      if (this.isNotEmpty(dateStr)) {\n        return new Date(Date.parse(dateStr.replace(/-/g, \"/\")));\n      }\n      return '';\n    },\n\n\t\t/**\n\t\t * 得到一天的开始 date类型\n\t\t * @param date\n\t\t */\n    getDateStart: function (date) {\n      var fmt = 'yyyy-MM-dd';\n      var dateStartStr = this.getDateStartStr(date, fmt);\n      var startTime = new Date(Date.parse(dateStartStr));\n      return startTime;\n    },\n\n\t\t/**\n\t\t * 得到一天的开始 str 类型\n\t\t * @param date\n\t\t */\n    getDateStartStr: function (date, fmt) {\n      if (typeof fmt == 'undefined') {\n        fmt = 'yyyy-MM-dd';\n      }\n      var dateStr = this.format(date, fmt);\n      dateStr += ' 00:00:00';\n      return dateStr;\n    },\n\n\t\t/**\n\t\t * 得到一天的结束 date类型\n\t\t * @param date\n\t\t */\n    getDateEnd: function (date) {\n      var fmt = 'yyyy-MM-dd';\n      var dateEndStr = this.getDateEndStr(date, fmt);\n      var endTime = new Date(Date.parse(dateEndStr));\n      return endTime;\n    },\n\n\t\t/**\n\t\t * 得到一天的结束 str 类型\n\t\t * @param date\n\t\t */\n    getDateEndStr: function (date, fmt) {\n      if (typeof fmt == 'undefined') {\n        fmt = 'yyyy-MM-dd';\n      }\n      var endStr = this.format(date, fmt);\n      endStr += ' 23:59:59';\n      return endStr;\n    },\n\n\t\t/**\n\t\t * 两个时间比较大小\n\t\t * @param d1\n\t\t * @param d2\n\t\t */\n    compareDate: function (d1, d2) {\n      if (d1 && d2) {\n        if (d1.getTime() > d2.getTime()) {\n          return 1;\n        } else if (d1.getTime() == d2.getTime()) {\n          return 0;\n        } else if (d1.getTime() < d2.getTime()) {\n          return -1;\n        }\n      }\n    },\n\n\t\t/**\n\t\t * 得到星期几, 支持中英\n\t\t * @param date\n\t\t * @param type\n\t\t * @returns {string}\n\t\t */\n    getWeek: function (date, type) {\n      if (date) {\n        if (!this.isNotEmpty(type)) {\n          type = 0;\n        }\n        var index = date.getDay();\n        var dateStr = '';\n        switch (type) {\n          case this.WEEKTYPE.ZH_DAYNAME:\n            dateStr = _options.ZH.dayNames[index];\n            break;\n          case this.WEEKTYPE.ZH_SDAYNAME:\n            dateStr = _options.ZH.shortDayNames[index];\n            break;\n          case this.WEEKTYPE.US_DAYNAME:\n            dateStr = _options.US.dayNames[index];\n            break;\n          case this.WEEKTYPE.US_SDAYNAME:\n            dateStr = _options.US.shortDayNames[index];\n            break;\n        }\n        return dateStr;\n      }\n    },\n\n\t\t/**\n\t\t * 是否为闰年\n\t\t * @param date\n\t\t * @returns {boolean}\n\t\t */\n    isLeapYear: function (date) {\n      if (date instanceof Date) {\n        return (0 == date.getYear() % 4 && ((date.getYear() % 100 != 0) || (date.getYear() % 400 == 0)));\n      }\n      console.warn('argument format is wrong');\n      return false;\n    },\n\n\t\t/**\n\t\t * 字符串是否为正确的时间格式，支持 - /\n\t\t * @param dateStr\n\t\t * @returns {boolean}\n\t\t */\n    isValidDate: function (dateStr) {\n      if (this.isNotEmpty(dateStr)) {\n        var r = dateStr.match(/^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/);\n        if (r == null) {\n          return false;\n        }\n        var d = new Date(r[1], r[3] - 1, r[4]);\n        var num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);\n        return (num != 0);\n      }\n    },\n\n\t\t/**\n\t\t * 增加天数\n\t\t * @param date\n\t\t * @param dayNum\n\t\t */\n    addDay: function (date, dayNum) {\n      if (this.isNotEmpty(date) && this.isNotEmpty(dayNum) && date instanceof Date && typeof dayNum == 'number') {\n        date.setDate(date.getDate() + dayNum);\n      } else {\n        console.warn('date or dayNum format wrong');\n      }\n      return date;\n    },\n\n    addDayStr: function (dateStr, dayNum) {\n      var date = '';\n      if (this.isNotEmpty(dateStr) && this.isNotEmpty(dayNum) && typeof dayNum == 'number') {\n        date = this.formatToDate(dateStr);\n        date.setDate(date.getDate() + dayNum);\n      } else {\n        console.warn('dateStr or dayNum format wrong');\n      }\n      return date;\n    },\n\n\t\t/**\n\t\t * 增加月份\n\t\t * @param date\n\t\t * @param dayNum\n\t\t */\n    addMonth: function (date, monthNum) {\n      if (this.isNotEmpty(date) && this.isNotEmpty(monthNum) && date instanceof Date && typeof monthNum == 'number') {\n        date.setDate(1); // 兼容 31号的特殊情况\n        date.setMonth(date.getMonth() + monthNum);\n      } else {\n        console.warn('date or monthNum format wrong');\n      }\n      return date;\n    },\n\n    addMonthStr: function (dateStr, monthNum) {\n      var date = '';\n      if (this.isNotEmpty(dateStr) && this.isNotEmpty(monthNum) && typeof monthNum == 'number') {\n        date = this.formatToDate(dateStr);\n        date.setDate(1); // 兼容 31号的特殊情况\n        date.setMonth(date.getMonth() + monthNum);\n      } else {\n        console.warn('date or monthNum format wrong');\n      }\n      return date;\n    },\n\n\t\t/**\n\t\t * 增加年份\n\t\t * @param date\n\t\t * @param dayNum\n\t\t */\n    addYear: function (date, yearNum) {\n      if (this.isNotEmpty(date) && this.isNotEmpty(yearNum) && date instanceof Date && typeof yearNum == 'number') {\n        date.setYear(date.getFullYear() + yearNum);\n      } else {\n        console.warn('date or yearNum format wrong');\n      }\n      return date;\n    },\n\n    addYearStr: function (dateStr, yearNum) {\n      var date = '';\n      if (this.isNotEmpty(dateStr) && this.isNotEmpty(yearNum) && typeof yearNum == 'number') {\n        date = this.formatToDate(dateStr);\n        date.setYear(date.getFullYear() + yearNum);\n      } else {\n        console.warn('date or yearNum format wrong');\n      }\n      return date;\n    },\n\n\n\n\n\t\t/**\n\t\t * 是否为空\n\t\t * @param str\n\t\t * @returns {boolean}\n\t\t */\n    isNotEmpty: function (str) {\n      if (str != '' && str != null && typeof str != 'undefined') {\n        return true;\n      }\n      console.warn('argument format is wrong');\n      return false;\n    },\n\n    //定义内部常量\n    WEEKTYPE: {\n      ZH_DAYNAME: 0,\n      ZH_SDAYNAME: 1,\n      US_DAYNAME: 2,\n      US_SDAYNAME: 3,\n    }\n\n\n  }\n  //这里确定了插件的名称\n  this.DateFormat = _date_format_api;\n})();"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>时间，日期转换</title>\n    <script src=\"dateformat.js\"></script>\n    <script>\n        //alert(DateFormat.format(new Date() , 'yyyyMMdd'));\n        //alert(DateFormat.getDateStart(new Date()) , 'yyyyMMdd');\n        //alert(DateFormat.getDateEndStr(new Date(), 'yyyy/MM/dd'));\n        //alert(DateFormat.getWeek(new Date(),DateFormat.WEEKTYPE.US_DAYNAME));\n        //console.log(DateFormat.addDay(new Date(), '3'));\n        //console.log(DateFormat.format(new Date()));\n        //console.log(DateFormat.formatToDate('2017/04/14 14:31:07'));\n        //console.log(DateFormat.isValidDate('2017-04-14 14:31:07'));\n        //console.log(DateFormat.format(new Date()));\n\n        //console.log(DateFormat.addDayStr('2017-04-18 12:12:12' , 3));\n    </script>\n</head>\n<body>\n\n</body>\n</html>"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"dateformat-util\",\n  \"version\": \"1.0.5\",\n  \"description\": \"A super-lightweight time conversion tool class\",\n  \"main\": \"dateformat-npm.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/XuXiaoGH/dateformat.js.git\"\n  },\n  \"keywords\": [\n    \"date\",\n    \"format\"\n  ],\n  \"author\": \"heixuxiao@163.com\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/XuXiaoGH/dateformat.js/issues\"\n  },\n  \"homepage\": \"https://github.com/XuXiaoGH/dateformat.js#readme\"\n}\n"
  }
]