四、Date日期类

迁移时间:2017年5月27日18:43:02

Author:Marydon

  (一)对日期进行格式化(日期转字符串)

  自定义Date日期类的format()格式化方法

    方式一:(非原创)  

// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd HH:mm:ss.S") ==> 2016-09-19 16:32:53.731
// (new Date()).Format("yyyy-M-d H:m:s:S") ==> 2016-9-19 16:40:9:955
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.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;
};

    测试:

      获取系统当前时间并格式化

window.onload=function() {
var date = new Date();
var b = date.toLocaleDateString();//获取的格式为:2016年9月19日
var d = date.toLocaleTimeString();//下午4:42:46
var e = date.toLocaleString();//2016年9月19日 下午4:44:02
var f = date.toDateString();//Mon Sep 19 2016
var g = date.toUTCString();//Mon, 19 Sep 2016 08:45:42 GMT
var h = date.toString();//Mon Sep 19 2016 16:46:23 GMT+0800 (中国标准时间)
//自定义日期格式
var c = date.Format("yyyy-MM-dd HH:mm:ss");//format()方法是自定义的
document.getElementById("aa").value = c;
};

    方式二:(推荐使用)

Date.prototype.formatDate=function(fmt) {   

    var o = {
"M+" : this.getMonth()+1, // 月份
"d+" : this.getDate(), // 日
"h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, // 小时
"H+" : this.getHours(), // 小时
"m+" : this.getMinutes(), // 分
"s+" : this.getSeconds(), // 秒
"q+" : Math.floor((this.getMonth()+3)/3), // 季度
"S" : this.getMilliseconds() // 毫秒
};
var week = {
"0" : "\u65e5",
"1" : "\u4e00",
"2" : "\u4e8c",
"3" : "\u4e09",
"4" : "\u56db",
"5" : "\u4e94",
"6" : "\u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);
}
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;
}     

  UpdateTime--2017年6月1日08:01:20    

  (二)字符串转日期

    方式一:使用Date.parse()

var day = "2017-06-01";
// 将yyyy-MM-dd转换成yyyy/MM/dd
day = day.replace(/-/g,"/");// 2017/06/01
// 返回1970年1月1日午夜到指定日期(字符串)的毫秒数
var dayTime = Date.parse(day);
var date = new Date(dayTime);
alert(date);   

    注意:

      Date.parse()具有兼容性问题,低版本IE浏览器不支持"yyyy-MM-dd"转换成Date,只支持"yyyy/MM/dd"转换成日期。

    方式二:自定义Date.parseDate()方法

Date.parseDate = function(str)
{
if (typeof str == 'string')
{
// 标准格式: yyyy-MM-dd
var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);
if (results && results.length > 3)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])));
}
// 标准格式: yyyy-MM-dd hh:ss:dd
results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);
if (results && results.length > 6)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])), parseInt(delZero(results[4])), parseInt(delZero(results[5])), parseInt(delZero(results[6])));
}
// 标准格式: yyyy-MM-dd hh:ss:dd...
results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);
if (results && results.length > 7)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])), parseInt(delZero(results[4])), parseInt(delZero(results[5])), parseInt(delZero(results[6])), parseInt(delZero(results[7])));
}
// 标准格式:yyyy/MM/dd
results = str.match(/^ *(\d{4})\/(\d{1,2})\/(\d{1,2}) *$/);
if (results && results.length > 3)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])));
}
// 标准格式:yyyy/MM/dd hh:ss:dd
results = str.match(/^ *(\d{4})\/(\d{1,2})\/(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);
if (results && results.length > 6)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])), parseInt(delZero(results[4])), parseInt(delZero(results[5])), parseInt(delZero(results[6])));
}
// 标准格式:yyyy/MM/dd hh:ss:dd...
results = str.match(/^ *(\d{4})\/(\d{1,2})\/(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);
if (results && results.length > 7)
{
return new Date(parseInt(delZero(results[1])), parseInt(delZero(results[2])) - 1, parseInt(delZero(results[3])), parseInt(delZero(results[4])), parseInt(delZero(results[5])), parseInt(delZero(results[6])), parseInt(delZero(results[7])));
}
}
return null;
} function delZero(str){
if(str.charAt(0) == '0'){
return str.substring(1);
}
return str;
}

  测试:

// 字符串转成日期对象
var str = Date.parseDate('2017-06-01');
alert(str);

  (三)根据日期返回本周周一和周日的日期

/**
* 根据日期返回本周周一和周日的日期
* @param day
* 参数日期
* @param num
* 第几周
* @return oneWeek
* 周一,周日所在日期
*/
function getWeekDate(day,num) { num = num || 0;
// 返回值:周一和周日所在的日期
var oneWeek = {};
// 初始日期
var initDate = "";
// 截取年月日
initDate = day.split(' ')[0];
// ie兼容性问题,将yyyy-MM-dd转换成yyyy/MM/dd
initDate = initDate.replace(/-/g,"/");
// 将string转换成Date
initDate = new Date(Date.parse(initDate));//格式只能是yyyy/MM/dd // 返回 day距离1970 年 1 月 1 日0时0分的毫秒数
var nowTime = initDate.getTime();
// 返回星期的某一天的数字: 0(周日) 到 6(周六)
var weekNum = initDate.getDay();
// 一天所代表的毫秒数
var oneDayTime = 24 * 60 * 60 * 1000; //显示周一
var MondayTime = nowTime - (weekNum - 1) * oneDayTime ;
//显示周日
var SundayTime = nowTime + (7 - weekNum) * oneDayTime ;
if (0 != num) {
MondayTime += 7 * num * oneDayTime;
SundayTime += 7 * num * oneDayTime;
} //初始化日期时间
var monday = new Date(MondayTime);
var sunday = new Date(SundayTime);
// formatDate是自定义的格式化方法
monday = monday.formatDate('yyyy-MM-dd');
sunday = sunday.formatDate('yyyy-MM-dd'); oneWeek.Monday = monday;
oneWeek.Sunday = sunday; return oneWeek;
}

    测试:

var week = getWeekDate('2017-05-27',0);
console.log(week.Monday + "," + week.Sunday);
 

javascript Date日期类的更多相关文章

  1. 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类

    Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...

  2. Date日期类,Canlendar日历类,Math类,Random随机数学类

    Date日期类,SimpleDateFormat日期格式类 Date  表示特定的时间,精确到毫秒 常用方法 getTime() setTime() before() after() compareT ...

  3. JavaScript Date日期对象以及日期格式化方法

    前言 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1 ...

  4. C++实现Date日期类

    定义一个Date类,包含三个属性年.月.日 实现了如下功能: 年月日的增加.减少:2017年10月1日加上100个月30天是2025年5月31日 输出某天是星期几:2017年10月1日是星期日 判断某 ...

  5. JavaScript Date 日期属性和方法

    JavaScript 日期(Date) Date对象用于处理日期和时间.使用对象new Date()创建日期.实例化日期有四种方式: var d1 = new Date(); var d2 = new ...

  6. 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 ...

  7. java Date日期类和SimpleDateFormat日期类格式

    ~Date表示特定的时间,精确到毫秒~构造方法:public Date()//构造Date对象并初始化为当前系统的时间public Date(long date) //1970-1-1 0:0:0到指 ...

  8. JavaScript Date 日期操作

    在前端工程师的道路上,可能有时候需要与时间来打交道,下面我们来看一下日常对日期的操作,今天我们介绍的是Day.js插件 Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Mom ...

  9. Date日期类 Calendar日历类 完成可视化日历

    package com.test; import java.text.DateFormat; import java.text.ParseException; import java.text.Sim ...

随机推荐

  1. 1.L 查询关键字 HEXLOC

    Take the compile listing for the program that has either OFFSET or LIST option selected. Use the OFF ...

  2. 最近升级mysql5.7出现下面问题,ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by

    执行sql: SELECT * FROM `user_link` WHERE `group_id` IN ('78', '79') GROUP BY `link_id` 报错: SQLSTATE[42 ...

  3. AGC 022 C - Remainder Game

    题面在这里! 显然权值是 2^i 这种的话就是要你贪心,高位能不选就不选. 并且如果 % x 之后再去 % 一个>=x的数是没有用的,所以我们可以把操作的k看成单调递减序列. 这样的话就是一个有 ...

  4. 【点分治】Osipovsky Cup 2014 Kovrov, Sunday, December 21, 2014 Problem A. Attack and Defence

    题意:给你一棵树,每个点有一个左括号或者右括号,问你树上能够完美匹配的路径数量(l->r,r->l 视作不同路径). 点分治可以使用“不扣去重复答案”的写法,只不过,要先将每个点的子树按照 ...

  5. 【构造】CDOJ1607 大学生足球联赛

    请自行百度逆时针轮转法 //单循环赛 逆时针轮转法 #include<cstdio> using namespace std; int n,a[70]; int main(){ scanf ...

  6. Problem H: 零起点学算法103——查找最大元素

    #include<stdio.h> #include<string.h> int main() { ]; while(gets(a)!=NULL) { ]; ;a[i]!='\ ...

  7. 【MySQL笔记】解除输入的安全模式,Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.

    Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE tha ...

  8. 【java】实体类中 Set<对象> 按照对象的某个字段对set排序

    背景: User实体类 有个属性是 Set<PositionChange> 职位变更字段 如下: PositionChange实体类  有个属性是positionStartDate   什 ...

  9. Quartz_TimeJob例子(C#)

    执行入口: using System; using System.Collections.Generic; using log4net; using Quartz; using ypt_base.Co ...

  10. CDHtmlDialog 基本使用

    跳转 Navigate("res://tt.exe/#138"); 138是html的资源号 输入框的Get,set HRESULT CTTDlg::OnButtonCancel( ...