Date对象格式化方法

作者:张经炜 来源:张经炜blog 时间:2009-11-16 13:17:00 

/* * 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 stringsdateFormat.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 stringsdateFormat.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

MaskDescription
dDay of the month as digits; no leading zero for single-digit days.
ddDay of the month as digits; leading zero for single-digit days.
dddDay of the week as a three-letter abbreviation.
ddddDay of the week as its full name.
mMonth as digits; no leading zero for single-digit months.
mmMonth as digits; leading zero for single-digit months.
mmmMonth as a three-letter abbreviation.
mmmmMonth as its full name.
yyYear as last two digits; leading zero for years less than 10.
yyyyYear represented by four digits.
hHours; no leading zero for single-digit hours (12-hour clock).
hhHours; leading zero for single-digit hours (12-hour clock).
HHours; no leading zero for single-digit hours (24-hour clock).
HHHours; leading zero for single-digit hours (24-hour clock).
MMinutes; no leading zero for single-digit minutes.
Uppercase M unlike CF timeFormat’s m to avoid conflict with months.
MMMinutes; leading zero for single-digit minutes.
Uppercase MM unlike CF timeFormat’s mm to avoid conflict with months.
sSeconds; no leading zero for single-digit seconds.
ssSeconds; leading zero for single-digit seconds.
l or LMilliseconds. l gives 3 digits. L gives 2 digits.
tLowercase, single-character time marker string: a or p.
No equivalent in CF.
ttLowercase, two-character time marker string: am or pm.
No equivalent in CF.
TUppercase, single-character time marker string: A or P.
Uppercase T unlike CF’s t to allow for user-specified casing.
TTUppercase, two-character time marker string: AM or PM.
Uppercase TT unlike CF’s tt to allow for user-specified casing.
ZUS 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-0500
No equivalent in CF.
oGMT/UTC timezone offset, e.g. -0500 or +0230.
No equivalent in CF.
SThe 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.

 

NameMaskExample
defaultddd mmm dd yyyy HH:MM:ssSat Jun 09 2007 17:46:21
shortDatem/d/yy6/9/07
mediumDatemmm d, yyyyJun 9, 2007
longDatemmmm d, yyyyJune 9, 2007
fullDatedddd, mmmm d, yyyySaturday, June 9, 2007
shortTimeh:MM TT5:46 PM
mediumTimeh:MM:ss TT5:46:21 PM
longTimeh:MM:ss TT Z5:46:21 PM EST
isoDateyyyy-mm-dd2007-06-09
isoTimeHH:MM:ss17:46:21
isoDateTimeyyyy-mm-dd’T'HH:MM:ss2007-06-09T17:46:21
isoUtcDateTimeUTC:yyyy-mm-dd’T'HH:MM:ss’Z’2007-06-09T22:46:21Z

标签:date,格式化,时间,日期
0
投稿

猜你喜欢

  • 隐藏并修改文件的最后修改时间的asp-webshell

    2009-02-28 13:31:00
  • SQLServer 2008助你轻松编写T-SQL存储过程

    2010-12-06 13:38:00
  • 动态载入asp树源码

    2007-09-06 19:34:00
  • AXObject解决IE需要激活 ActiveX 控件方法

    2007-11-08 12:16:00
  • 教你如何在SQL Server计算机列和平均值

    2009-01-20 15:10:00
  • ie6下实现position-fixed效果

    2009-06-05 18:47:00
  • sql之IN和BETWEEN条件运算

    2007-09-11 13:35:00
  • AJAX快速入门之HTTP协议基础

    2008-01-16 19:04:00
  • Quester解读17条广告效果测定

    2007-11-27 12:51:00
  • 基于jQuery的自动完成插件

    2011-02-05 10:55:00
  • 利用SQL语句对不同数据库进行高效果分页

    2008-11-28 14:44:00
  • Oracle9i在Win2k环境下的完全卸载

    2010-07-28 13:03:00
  • Dreamweaver给你的网页盖个章

    2008-02-03 11:35:00
  • MYSQL教程:服务器优化和硬件优化

    2009-02-27 15:43:00
  • 解决图片撑大问题

    2009-09-22 14:51:00
  • CSS资料中常见英语词语翻译整理

    2008-08-29 12:50:00
  • MYSQL各字段的长度是多少?

    2009-10-28 18:32:00
  • 真正保险的“有属性”检测

    2010-03-28 13:25:00
  • 启发式评估(heuristic evaluation)

    2009-08-27 13:03:00
  • asp如何验证信用卡是否可用?

    2010-06-10 18:39:00
  • asp之家 网络编程 m.aspxhome.com