Date对象格式化函数代码


Posted in Javascript onJuly 17, 2010
/* 
* Date Format 1.2.3 
* (c) 2007-2009 Steven Levithan 
* MIT license 
* 
* Includes enhancements by Scott Trenda 
* and Kris Kowal 
* 
* Accepts a date, a mask, or a date and a mask. 
* Returns a formatted version of the given date. 
* The date defaults to the current date/time. 
* The mask defaults to dateFormat.masks.default. 
*/ var dateFormat = function () { 
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, 
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, 
timezoneClip = /[^-+\dA-Z]/g, 
pad = function (val, len) { 
val = String(val); 
len = len || 2; 
while (val.length < len) val = "0" + val; return val; }; // Regexes and supporting functions are cached through closure return function (date, mask, utc) { var dF = dateFormat; // You can't provide utc if you skip other args (use the "UTC:" mask prefix) if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { mask = date; date = undefined; } // Passing date through Date applies Date.parse, if necessary date = date ? new Date(date) : new Date; if (isNaN(date)) throw SyntaxError("invalid date"); mask = String(dF.masks[mask] || mask || dF.masks["default"]); // Allow setting the utc argument via the mask if (mask.slice(0, 4) == "UTC:") { mask = mask.slice(4); utc = true; } var _ = utc ? "getUTC" : "get", d = date[_ + "Date"](), D = date[_ + "Day"](), m = date[_ + "Month"](), y = date[_ + "FullYear"](), H = date[_ + "Hours"](), M = date[_ + "Minutes"](), s = date[_ + "Seconds"](), L = date[_ + "Milliseconds"](), o = utc ? 0 : date.getTimezoneOffset(), flags = { d: d, dd: pad(d), ddd: dF.i18n.dayNames[D], dddd: dF.i18n.dayNames[D + 7], m: m + 1, mm: pad(m + 1), mmm: dF.i18n.monthNames[m], mmmm: dF.i18n.monthNames[m + 12], yy: String(y).slice(2), yyyy: y, h: H % 12 || 12, hh: pad(H % 12 || 12), H: H, HH: pad(H), M: M, MM: pad(M), s: s, ss: pad(s), l: pad(L, 3), L: pad(L > 99 ? Math.round(L / 10) : L), 
t: H < 12 ? "a" : "p", 
tt: H < 12 ? "am" : "pm", 
T: H < 12 ? "A" : "P", 
TT: H < 12 ? "AM" : "PM", Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), 
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] 
}; 
return mask.replace(token, function ($0) { 
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); 
}); 
}; 
}(); 
// Some common format strings 
dateFormat.masks = { 
"default": "ddd mmm dd yyyy HH:MM:ss", 
shortDate: "m/d/yy", 
mediumDate: "mmm d, yyyy", 
longDate: "mmmm d, yyyy", 
fullDate: "dddd, mmmm d, yyyy", 
shortTime: "h:MM TT", 
mediumTime: "h:MM:ss TT", 
longTime: "h:MM:ss TT Z", 
isoDate: "yyyy-mm-dd", 
isoTime: "HH:MM:ss", 
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", 
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" 
}; 
// Internationalization strings 
dateFormat.i18n = { 
dayNames: [ 
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", 
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 
], 
monthNames: [ 
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" 
] 
}; 
// For convenience... 
Date.prototype.format = function (mask, utc) { 
return dateFormat(this, mask, utc); 
};

用法:
var now = new Date(); now.format("m/dd/yy"); 
// Returns, e.g., 6/09/07 
// Can also be used as a standalone function 
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT"); 
// Saturday, June 9th, 2007, 5:46:21 PM 
// You can use one of several named masks 
now.format("isoDateTime"); 
// 2007-06-09T17:46:21 
// ...Or add your own 
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"'; 
now.format("hammerTime"); 
// 17:46! Can't touch this! 
// When using the standalone dateFormat function, 
// you can also provide the date as a string 
dateFormat("Jun 9 2007", "fullDate"); 
// Saturday, June 9, 2007 
// Note that if you don't include the mask argument, 
// dateFormat.masks.default is used 
now.format(); 
// Sat Jun 09 2007 17:46:21 
// And if you don't include the date argument, 
// the current date and time is used 
dateFormat(); 
// Sat Jun 09 2007 17:46:22 
// You can also skip the date argument (as long as your mask doesn't 
// contain any numbers), in which case the current date/time is used 
dateFormat("longTime"); 
// 5:46:22 PM EST 
// And finally, you can convert local time to UTC time. Either pass in 
// true as an additional argument (no argument skipping allowed in this case): 
dateFormat(now, "longTime", true); 
now.format("longTime", true); 
// Both lines return, e.g., 10:46:21 PM UTC 
// ...Or add the prefix "UTC:" to your mask. 
now.format("UTC:h:MM:ss TT Z"); 
// 10:46:21 PM UTC

Mask Description
d Day of the month as digits; no leading zero for single-digit days.
dd Day of the month as digits; leading zero for single-digit days.
ddd Day of the week as a three-letter abbreviation.
dddd Day of the week as its full name.
m Month as digits; no leading zero for single-digit months.
mm Month as digits; leading zero for single-digit months.
mmm Month as a three-letter abbreviation.
mmmm Month as its full name.
yy Year as last two digits; leading zero for years less than 10.
yyyy Year represented by four digits.
h Hours; no leading zero for single-digit hours (12-hour clock).
hh Hours; leading zero for single-digit hours (12-hour clock).
H Hours; no leading zero for single-digit hours (24-hour clock).
HH Hours; leading zero for single-digit hours (24-hour clock).
M Minutes; no leading zero for single-digit minutes.Uppercase M unlike CF timeFormat's m to avoid conflict with months.
MM Minutes; leading zero for single-digit minutes.Uppercase MM unlike CF timeFormat's mm to avoid conflict with months.
s Seconds; no leading zero for single-digit seconds.
ss Seconds; leading zero for single-digit seconds.
l or L Milliseconds. l gives 3 digits. L gives 2 digits.
t Lowercase, single-character time marker string: a or p.No equivalent in CF.
tt Lowercase, two-character time marker string: am or pm.No equivalent in CF.
T Uppercase, single-character time marker string: A or P.Uppercase T unlike CF's t to allow for user-specified casing.
TT Uppercase, two-character time marker string: AM or PM.Uppercase TT unlike CF's tt to allow for user-specified casing.
Z US timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500No equivalent in CF.
o GMT/UTC timezone offset, e.g. -0500 or +0230.No equivalent in CF.
S The date's ordinal suffix (st, nd, rd, or th). Works well with d.No equivalent in CF.
'…' or "…" Literal character sequence. Surrounding quotes are removed.No equivalent in CF.
UTC: Must be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The “UTC:” prefix is removed.No equivalent in CF.
Name Mask Example
default ddd mmm dd yyyy HH:MM:ss Sat Jun 09 2007 17:46:21
shortDate m/d/yy 6/9/07
mediumDate mmm d, yyyy Jun 9, 2007
longDate mmmm d, yyyy June 9, 2007
fullDate dddd, mmmm d, yyyy Saturday, June 9, 2007
shortTime h:MM TT 5:46 PM
mediumTime h:MM:ss TT 5:46:21 PM
longTime h:MM:ss TT Z 5:46:21 PM EST
isoDate yyyy-mm-dd 2007-06-09
isoTime HH:MM:ss 17:46:21
isoDateTime yyyy-mm-dd'T'HH:MM:ss 2007-06-09T17:46:21
isoUtcDateTime UTC:yyyy-mm-dd'T'HH:MM:ss'Z' 2007-06-09T22:46:21Z
Javascript 相关文章推荐
Javascript学习笔记6 prototype的提出
Jan 11 Javascript
利用js制作html table分页示例(js实现分页)
Apr 25 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
JS实现的表头列头固定页面功能示例
Jan 10 Javascript
AngularJS中的promise用法分析
May 19 Javascript
vue监听scroll的坑的解决方法
Sep 07 Javascript
JS实现的集合去重,交集,并集,差集功能示例
Mar 13 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
May 06 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 Javascript
js下利用控制器载入对应脚本
Jul 17 #Javascript
js 纯数字不重复排列的另类方法
Jul 17 #Javascript
jQuery Autocomplete自动完成插件
Jul 17 #Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 #Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 #Javascript
IE6,IE7下js动态加载图片不显示错误
Jul 17 #Javascript
js模拟类继承小例子
Jul 17 #Javascript
You might like
一个PHP+MSSQL分页的例子
2006/10/09 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
python 快速排序代码
2009/11/23 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
django 简单实现登录验证给你
2019/11/06 Python
Python 如何创建一个线程池
2020/07/28 Python
Python中Selenium模块的使用详解
2020/10/09 Python
会计实习期自我鉴定
2013/10/06 职场文书
夜班门卫岗位职责
2013/12/09 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS