date.js
/**
* 此JS文件是格式化JS中日期时间的工具类,其中包含了传入日期对象Date,格式化成想要的格式,<br>
* 或者传入字符串格式的时间个,次字符串日期对应的格式可以转换为相应的日期对象,<br>
* 可以计算两个日期之间的差值
*
* y: 表示年
* M:表示一年中的月份 1~12
* d: 表示月份中的天数 1~31
* H:表示一天中的小时数 00~23
* m: 表示小时中的分钟数 00~59
* s: 表示分钟中的秒数 00~59
*/
var DateFormat = function(bDebug){
this.isDebug = bDebug || false;
this.curDate = new Date();
}
DateFormat.prototype = {
//定义一些常用的日期格式的常量
DEFAULT_DATE_FORMAT: 'yyyy-MM-dd',
DEFAULT_MONTH_FORMAT: 'yyyy-MM',
DEFAULT_YEAR_FORMAT: 'yyyy',
DEFAULT_TIME_FORMAT: 'HH:mm:ss',
DEFAULT_DATETIME_FORMAT: 'yyyy-MM-dd HH:mm:ss',
DEFAULT_YEAR: 'YEAR',
DEFAULT_MONTH: 'MONTH',
DEFAULT_DATE: 'DATE',
DEFAULT_HOUR: 'HOUR',
DEFAULT_MINUTE: 'MINUTE',
DEFAULT_SECOND: 'SECOND',
/**
* 根据给定的日期时间格式,格式化当前日期
* @params strFormat 格式化字符串, 如:"yyyy-MM-dd" 默认格式为:“yyyy-MM-dd HH:mm:ss”
* @return 返回根据给定格式的字符串表示的时间日期格式<br>
* 如果传入不合法的格式,则返回日期的字符串格式{@see Date#toLocaleString()}
*/
formatCurrentDate: function(strFormat){
try{
var tempFormat = strFormat == undefined? this.DEFAULT_DATETIME_FORMAT: strFormat;
var dates = this.getDateObject(this.curDate);
if(/(y+)/.test(tempFormat)){
var fullYear = this.curDate.getFullYear() + '';
var year = RegExp.$1.length == 4? fullYear: fullYear.substr(4 - RegExp.$1.length);
tempFormat = tempFormat.replace(RegExp.$1, year);
}
for(var i in dates){
if(new RegExp('(' + i + ')').test(tempFormat)){
var target = RegExp.$1.length == 1? dates[i]: ('0' + dates[i]).substr(('' + dates[i]).length - 1);
tempFormat = tempFormat.replace(RegExp.$1, target);
}
}
return tempFormat === strFormat? this.curDate.toLocaleString(): tempFormat;
}catch(e){
this.debug('格式化日期出现异常:' + e.message);
}
},
/**
* 根据给定的格式,把给定的时间进行格式化
* @params date 要格式化的日期
* @params strFormat 要得到的日期的格式的格式化字符串,如:'yyyy-MM-dd',默认:yyyy-MM-dd HH:mm:ss
* @return 根据规定格式的时间格式
*
* @updateDate 2011-09-15
*/
format: function(date, strFormat){
try{
if(date == undefined){
this.curDate = new Date();
}else if(!(date instanceof Date)){
this.debug('你输入的date:' + date + '不是日期类型');
return date;
}else{
this.curDate = date;
}
return this.formatCurrentDate(strFormat);
}catch(e){
this.debug('格式化日期出现异常:' + e.message);
}
},
/**
* 根据给定的格式对给定的字符串日期时间进行解析,
* @params strDate 要解析的日期的字符串表示,此参数只能是字符串形式的日期,否则返回当期系统日期
* @params strFormat 解析给定日期的顺序, 如果输入的strDate的格式为{Date.parse()}方法支持的格式,<br>
* 则可以不传入,否则一定要传入与strDate对应的格式, 若不传入格式则返回当期系统日期。
* @return 返回解析后的Date类型的时间<br>
* 若不能解析则返回当前日期<br>
* 若给定为时间格式 则返回的日期为 1970年1月1日的日期
*
* bug: 此方法目前只能实现类似'yyyy-MM-dd'格式的日期的转换,<br>
* 而'yyyyMMdd'形式的日期,则不能实现
*/
parseDate: function(strDate, strFormat){
if(typeof strDate != 'string'){
return new Date();
}
var longTime = Date.parse(strDate);
if(isNaN(longTime)){
if(strFormat == undefined){
this.debug('请输入日期的格式');
return new Date();
}
var tmpDate = new Date();
var regFormat = /(\w{4})|(\w{2})|(\w{1})/g;
var regDate = /(\d{4})|(\d{2})|(\d{1})/g;
var formats = strFormat.match(regFormat);
var dates = strDate.match(regDate);
if( formats != undefined && dates != undefined && formats.length == dates.length){
for(var i = 0; i < formats.length; i++){
var format = formats[i];
if(format === 'yyyy'){
tmpDate.setFullYear(parseInt(dates[i], 10));
}else if(format == 'yy'){
var prefix = (tmpDate.getFullYear() + '').substring(0, 2);
var year = (parseInt(dates[i], 10) + '').length == 4? parseInt(dates[i], 10): prefix + (parseInt(dates[i], 10) + '00').substring(0, 2);
var tmpYear = parseInt(year, 10);
tmpDate.setFullYear(tmpYear);
}else if(format == 'MM' || format == 'M'){
tmpDate.setMonth(parseInt(dates[i], 10) - 1);
}else if(format == 'dd' || format == 'd'){
tmpDate.setDate(parseInt(dates[i], 10));
}else if(format == 'HH' || format == 'H'){
tmpDate.setHours(parseInt(dates[i], 10));
}else if(format == 'mm' || format == 'm'){
tmpDate.setMinutes(parseInt(dates[i], 10));
}else if(format == 'ss' || format == 's'){
tmpDate.setSeconds(parseInt(dates[i], 10));
}
}
return tmpDate;
}
return tmpDate;
}else{
return new Date(longTime);
}
},
/**
* 根据给定的时间间隔类型及间隔值,以给定的格式对给定的时间进行计算并格式化返回
* @params date 要操作的日期时间可以为时间的字符串或者{@see Date}类似的时间对象,
* @params interval 时间间隔类型如:"YEAR"、"MONTH"、 "DATE", 不区分大小写
* @params amount 时间间隔值,可以正数和负数, 负数为在date的日期减去相应的数值,正数为在date的日期上加上相应的数值
* @params strFormat 当输入端的date的格式为字符串是,此项必须输入。若date参数为{@see Date}类型是此项会作为最终输出的格式。
* @params targetFormat 最终输出的日期时间的格式,若没有输入则使用strFormat或者默认格式'yyyy-MM-dd HH:mm:ss'
* @return 返回计算并格式化后的时间的字符串
*/
changeDate: function(date, interval, amount, strFormat, targetFormat){
var tmpdate = new Date();
if(date == undefined){
this.debug('输入的时间不能为空!');
return new Date();
}else if(typeof date == 'string'){
tmpdate = this.parseDate(date, strFormat);
}else if(date instanceof Date){
tmpdate = date;
}
var field = (typeof interval == 'string')? interval.toUpperCase(): 'DATE';
try{
amount = parseInt(amount + '', 10);
if(isNaN(amount)){
amount = 0;
}
}catch(e){
this.debug('你输入的[amount=' + amount + ']不能转换为整数');
amount = 0;
}
switch(field){
case this.DEFAULT_YEAR:
tmpdate.setFullYear(tmpdate.getFullYear() + amount);
break;
case this.DEFAULT_MONTH:
tmpdate.setMonth(tmpdate.getMonth() + amount);
break;
case this.DEFAULT_DATE:
tmpdate.setDate(tmpdate.getDate() + amount);
break;
case this.DEFAULT_HOUR:
tmpdate.setHours(tmpdate.getHours() + amount);
break;
case this.DEFAULT_MINUTE:
tmpdate.setMinutes(tmpdate.getMinutes() + amount);
break;
case this.DEFAULT_SECOND:
tmpdate.setSeconds(tmpdate.getSeconds() + amount);
break;
default:
this.debug('你输入的[interval:' + field + '] 不符合条件!');
}
this.curDate = tmpdate;
return this.formatCurrentDate(targetFormat == undefined? strFormat: targetFormat);
},
/**
* 比较两个日期的差距
* @param date1 Date类型的时间
* @param date2 Dete 类型的时间
* @param isFormat boolean 是否对得出的时间进行格式化,<br>
* false:返回毫秒数,true:返回格式化后的数据
* @return 返回两个日期之间的毫秒数 或者是格式化后的结果
*/
compareTo: function(date1, date2, isFormat){
try{
var len = arguments.length;
var tmpdate1 = new Date();
var tmpdate2 = new Date();
if(len == 1){
tmpdate1 = date1;
}else if(len >= 2){
tmpdate1 = date1;
tmpdate2 = date2;
}
if(!(tmpdate1 instanceof Date) || !(tmpdate2 instanceof Date)){
return 0;
}else{
var time1 = tmpdate1.getTime();
var time2 = tmpdate2.getTime();
var time = Math.max(time1, time2) - Math.min(time1, time2);
if(!isNaN(time) && time > 0){
if(isFormat){
var date = new Date(time);
var result = {};
result['year'] = (date.getFullYear() - 1970) > 0? (date.getFullYear() - 1970): '0';
result['month'] = (date.getMonth() - 1) > 0? (date.getMonth() - 1): '0';
result['day'] = (date.getDate() - 1) > 0? (date.getDate() - 1): '0';
result['hour'] = (date.getHours() - 8) > 0? (date.getHours() - 1): '0';
result['minute'] = date.getMinutes() > 0? date.getMinutes(): '0';
result['second'] = date.getSeconds() > 0? date.getSeconds(): '0';
return result;
}else {
return time;
}
}else{
return 0;
}
}
}catch(e){
this.debug('比较时间出现异常' + e.message);
}
},
/**
* 根据给定的日期得到日期的月,日,时,分和秒的对象
* @params date 给定的日期 date为非Date类型, 则获取当前日期
* @return 有给定日期的月、日、时、分和秒组成的对象
*/
getDateObject: function(date){
if(!(date instanceof Date)){
date = new Date();
}
return {
'M+' : date.getMonth() + 1,
'd+' : date.getDate(),
'H+' : date.getHours(),
'm+' : date.getMinutes(),
's+' : date.getSeconds()
};
},
/**
*在控制台输出日志
*@params message 要输出的日志信息
*/
debug: function(message){
try{
if(!this.isDebug){
return;
}
if(!window.console){
window.console = {};
window.console.log = function(){
return;
}
}
window.console.log(message + ' ');
}catch(e){
}
}
}
date.js的更多相关文章
- util.date.js
ylbtech-JavaScript-util: util.date.js 日期处理工具 1.A,JS-效果图返回顶部 1.B,JS-Source Code(源代码)返回顶部 1.B.1, m.y ...
- Date——js 获取当前日期到之后一个月30天的日期区间
var dateList = []; let startDate = new Date(); let endDate = new Date(); endDate.setDate(startDate.g ...
- 时间Date.js
<span style="line-height: 25.2px;">/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02- ...
- 日期-date.js
Date.prototype.format = function(format) { var o = { "M+" : this.getMonth() + 1, // 月 &quo ...
- javascript Date 日期格式化 formatDate, require.js 模块 支持全局js引入 / amd方式加载
* 引入AMD加载方式: require.js CDN https://cdn.bootcss.com/require.js/2.3.5/require.js * 创建模块文件./js/util/d ...
- 推荐轻量高效无依赖的开源JS插件和库
目录 图片 布局 音频视频 编辑器 轮播图 弹出层 表单 存储 动画 时间 其它 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果脚本.demo Lightgalle ...
- js 日期处理,json处理
模块化js :requirejshttp://www.requirejs.cn/ 好用的日期控件:http://www.bootcss.com/p/bootstrap-datetimepicker/i ...
- 移动端性能优化动态加载JS、CSS
JS CODE (function() { /** * update: * 1.0 */ var version = "insure 1.1.0"; var Zepto = Zep ...
- 2013/8/28 JS+HTML 三级省市区联动
var mp = ["安徽","北京","福建","甘肃","广东","广西", ...
随机推荐
- C++进阶1模板的使用
C++进阶1模板的使用 20131010 C++中,我们自己编程虽然不会怎么使用模板,包括函数模板和类模板,但是在大型的项目开发中函数模板和类模板是非常重要的.笔者在**面试的时候忙问道过这个问题,迷 ...
- 【Html 学习笔记】第八节——表单实践
列举一些实践的例子: 1.点击按钮后跳转: <html> <body> <form action="1.html"> First <inp ...
- iOS 11 实现App在禁止转屏的状态下网页播放器全屏
禁止转屏是这个意思,在General中设置Device Orientation只有竖屏. 要点就是重写UIViewController的以下3个属性方法 系统的全屏视频播放器是AVFullScreen ...
- Unity3D内存优化案例讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- Bandit:一种简单而强大的在线学习算法
假设我有5枚硬币,都是正反面不均匀的.我们玩一个游戏,每次你可以选择其中一枚硬币掷出,如果掷出正面,你将得到一百块奖励.掷硬币的次数有限(比如10000次),显然,如果要拿到最多的利益,你要做的就是尽 ...
- 服务上部署jmeter远程机
1.首先连接服务器 2.在/home下新创建一个自己的文件夹 ]#useradd zhuxiao ]#ls 显示新的用户并在home下创建zhuxiao文件夹 ①切换到用户zhuxiao目录下 ]#s ...
- Realm的常规使用与线程中的坑
结识 Realm 的催化剂 在我们公司的项目迭代中,由于在之前的聊天这个模块关于用户信息的传值有问题,而之前因为项目经过很多开发者的手,且不提整体的架构有多混乱,就单说缓存这块,就是乱的不行,有的地方 ...
- Mac 配置前端基本环境
一,sublime 下载一个版本,替换packages,要想shift command p管用,得在sublime里面control -,然后把 import urllib.request,os,h ...
- java区分绝对路径和相对路径
java区分绝对路径和相对路径 这里要区分的是目录路径 如: /opt/deve/tomcat/bin c:\deve\tomcat\bin 都是绝对目录路径 bin bin/data bin\dat ...
- 线性回归 Linear regression(2)线性回归梯度下降中学习率的讨论
这篇博客针对的AndrewNg在公开课中未讲到的,线性回归梯度下降的学习率进行讨论,并且结合例子讨论梯度下降初值的问题. 线性回归梯度下降中的学习率 上一篇博客中我们推导了线性回归,并且用梯度下降来求 ...