/**
* 日期工具类
*/
define(function(require, exports, module) {
var constants = require("constants"); // 常量类 /**
* 描述: 把日期格式字符串转换成js Date类型
*
* @param dateStr: 日期字符串 格式必须为 yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S
* @returns 返回JS日期对象
*/
function getDateByStr(dateStr){
if (!dateStr) {
return;
}
//去掉后面毫秒数
if (dateStr.indexOf(".") != -1) {
dateStr = dateStr.substring(0, dateStr.indexOf("."));
} // 形如20160101120101转换成2016-01-01 12:01:01
if ($.trim(dateStr).length == 14 && dateStr.indexOf("-") == -1) {
dateStr = dateStr.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1-$2-$3 $4:$5:$6');
} // 形如20160101转换成2016-01-01
if ($.trim(dateStr).length == 8 && dateStr.indexOf("-") == -1) {
dateStr = dateStr.replace(/(\d{4})(\d{2})(\d{2})/, '$1-$2-$3 00:00:00');
}
dateStr = dateStr.replace(new RegExp("-", "gm"), "/");
return new Date(dateStr);
} /**
* 描述:把yyyy-MM-dd hh:mm:ss (.S)日期字符串转化为指定格式的日期字符串
*
* @author
* @param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45
* 2、源日期为Date类型 如:new Date();
* @param fmt: 格式,如:yyyy-MM-dd
*/
function dateFormat(srcDate, fmt){
if (!srcDate || !fmt) {
return srcDate;
} // 把字符串转换成日期对象
var date = (typeof(srcDate) == "object") ? srcDate : getDateByStr(srcDate); // 非date类型时返回原字符串
if (isNaN(date.getDay())) {
return srcDate;
} 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 (/(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;
} /**
* 描述: 获取时间毫秒数
*
* @author
* @param date: 格式为yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S的时间字符串
* @returns 返回时间毫秒数
*/
function getDateTime(date){
if (!date) {
return 0;
}
//去掉后面毫秒数
if (date.indexOf(".") != -1) {
date = date.substring(0, date.indexOf("."));
}
date = date.replace(new RegExp("-", "gm"), "/");
return (new Date(date)).getTime();
} /**
* 描述:根据年份和月份计算出有多少天
* @author
* @param year: 年份
* @param month: 月份
* @returns 天数
*/
function getMonthDays(year, month){
var monthStartDate = new Date(year, month - 1, 1);
var monthEndDate = new Date(year, month, 1);
return (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24);
} /**
* 计算某日期为一周中的哪天
*/
function cweekday(wday)
{
var hzWeek= new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
return hzWeek[wday];
} /**
* 获取当前时间前后N天日期的方法
* 可以得到昨天,今天,明天,一月前,三月前,半年前,一年前的日期,
* 只要修改参数就可以实现得到任何一个天数
* 昨天:getDateStr(-1)
* 今天:getDateStr(0)
* 明天:getDateStr(1)
*
* formate==> 1:yyyyMMdd
* 2:yyyy-MM-dd
*/
function getDateStr(addDayCount, formate){
var dd = new Date();
dd.setDate(dd.getDate() + addDayCount); //获取addDayCount天后的日期
var y = dd.getFullYear();
var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期,不足10补0
var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate(); //获取当前几号,不足10补0
if(1 == formate){
return y + m + d; //格式:yyyyMMdd
}else if(2 == formate){
return y + "-" + m + "-" + d;
}
} function cala(date)
{
var y = date.substring(0,4);//年份
var m = date.substring(5,7);//月份
var d = date.substring(8,10);//日期
var next = 0;
var cash_time;
var ttt=new Date(y,m-1,d).getTime()+next * 24000 * 3600; var theday=new Date();
theday.setTime(ttt);
var weekday = cweekday(theday.getDay()); return weekday;
} /**
*获取当前时间和日期
*@param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45
* 2、源日期为Date类型 如:new Date();
*/
function getNowDate(fmt){
var nowDate=new Date();
if(fmt==1){
return dateFormat(nowDate, "2015-11-12 11:34:45");
}else{
return dateFormat(nowDate,"yyyy-MM-dd");
}
} var dateUtils = {
"dateFormat" : dateFormat, // 根据格式显示日期
"getMonthDays" : getMonthDays, //根据年份和月份计算出有多少天
"getDateTime" : getDateTime, //获取时间毫秒数
"cala" : cala //根据日期计算该日为一周中的某天
}; //暴露对外的接口
module.exports = dateUtils;
});

js日期工具的更多相关文章

  1. c# js日期工具

    c#获取日期当年最后一天:model.StartDate.AddYears(1).AddSeconds(-1) js日期工具: var dateToolObj = { methods: { //url ...

  2. JS 日期工具类-基于yDate

    源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...

  3. JS日期工具类(转)

    javascript Date format(js日期格式化) https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.htm ...

  4. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  5. 我用的一些Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 2.做些小型项目用Sublime Text. 3.Browser ...

  6. Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢.2.做些小型项目用Sublime Text.3.Browserif ...

  7. Node.js 常用工具

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherit ...

  8. java工具类-日期工具类

    1.获得时间戳 为了统一其他语言的如php和unix系统获取的时间戳是10位长度的,精确到秒. java时间戳长度是13位,精确到毫秒 我们获取时间戳需要相应处理. //获取当前时间戳,除以1000, ...

  9. Node.js 常用工具util包

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.isError(obj); util.is ...

随机推荐

  1. bzoj2253纸箱堆叠(动态规划+cdq分治套树状数组)

    Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , 之后,即可自动化生产三边边长为 (a mod P,a^2 mod p,a^3 mod P) (a^4 ...

  2. 【bzoj1004】[HNOI2008]Cards Burnside引理+背包dp

    题目描述 用三种颜色染一个长度为 $n=Sr+Sb+Sg$ 序列,要求三种颜色分别有 $Sr,Sb,Sg$ 个.给出 $m$ 个置换,保证这 $m$ 个置换和置换 ${1,2,3,...,n\choo ...

  3. 【bzoj4244】邮戳拉力赛 背包dp

    题目描述 IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶,下行电车沿编 ...

  4. [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘

    4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...

  5. 【BZOJ1065】【NOI2008】奥运物流(动态规划)

    [BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...

  6. 【BZOJ2329】括号修复(Splay)

    [BZOJ2329]括号修复(Splay) 题面 BZOJ 洛谷 题解 本来想着用线段树来写 但是有一个区间翻转 所以不能用线段树了,就只能用平衡树 然后直接\(Splay\)就好了 注意一下几个标记 ...

  7. 解题:APIO 2015 雅加达的摩天大楼

    题面 分块思想+最短路 发现对于步长小的doge会连出很多边,很容易导致大量的重边,于是对doge们根据步长分块讨论:根据步长建出分层图,然后把步长不超过某个值的doge们连到对应层上的点上,其余的d ...

  8. php使用时间戳保存时间的意义

    时间戳记录的是格林尼治时间,使用date格式化的时候会根据你程序设置的不同时区显示不同的时间. 如果使用具体时间,则还需要进行多一步转换.

  9. POJ 3260 完全背包+多重背包+思维

    传送门:https://vjudge.net/problem/20465/origin 题意:你有n种钞票,面值为c[i],数量为v[i],便利店老板有无数张面值为c[i]的钞票,问你买一个价值为T的 ...

  10. bzoj 4347 [POI2016]Nim z utrudnieniem DP

    4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 733  Solved: 281[Su ...