2009-06-12 77 views

回答

31

您原型的方法,所以你永远不会再做这种刺激性的任务:

Date.prototype.toFormattedString = function (f) 
{ 
    var nm = this.getMonthName(); 
    var nd = this.getDayName(); 
    f = f.replace(/yyyy/g, this.getFullYear()); 
    f = f.replace(/yy/g, String(this.getFullYear()).substr(2,2)); 
    f = f.replace(/MMM/g, nm.substr(0,3).toUpperCase()); 
    f = f.replace(/Mmm/g, nm.substr(0,3)); 
    f = f.replace(/MM\*/g, nm.toUpperCase()); 
    f = f.replace(/Mm\*/g, nm); 
    f = f.replace(/mm/g, String(this.getMonth()+1).padLeft('0',2)); 
    f = f.replace(/DDD/g, nd.substr(0,3).toUpperCase()); 
    f = f.replace(/Ddd/g, nd.substr(0,3)); 
    f = f.replace(/DD\*/g, nd.toUpperCase()); 
    f = f.replace(/Dd\*/g, nd); 
    f = f.replace(/dd/g, String(this.getDate()).padLeft('0',2)); 
    f = f.replace(/d\*/g, this.getDate()); 
    return f; 
}; 

(是的你可以链接那些替换,但在任何人询问之前,这不是为了可读性)


根据要求,额外的原型来支持上面的代码片段。

Date.prototype.getMonthName = function() 
{ 
    return this.toLocaleString().replace(/[^a-z]/gi,''); 
}; 

//n.b. this is sooo not i18n safe :) 
Date.prototype.getDayName = function() 
{ 
    switch(this.getDay()) 
    { 
     case 0: return 'Sunday'; 
     case 1: return 'Monday'; 
     case 2: return 'Tuesday'; 
     case 3: return 'Wednesday'; 
     case 4: return 'Thursday'; 
     case 5: return 'Friday'; 
     case 6: return 'Saturday'; 
    } 
}; 

String.prototype.padLeft = function (value, size) 
{ 
    var x = this; 
    while (x.length < size) {x = value + x;} 
    return x; 
}; 

和用法示例:

alert((new Date()).toFormattedString('dd Mmm, yyyy')); 
+0

+1的大FU日期...不错! :D – peirix 2009-06-12 14:00:17

+5

此代码依赖于具有Date.getMonthName(),Date.getDayName()和String.padLeft()的原型。如果你也提供了这些实现,这个片段可能对人更有用。 – 2009-06-12 14:04:15

7

你必须得到它的老同学:

Date.prototype.toMMddyyyy = function() { 

    var padNumber = function(number) { 

     number = number.toString(); 

     if (number.length === 1) { 
      return "0" + number; 
     } 
     return number; 
    }; 

    return padNumber(date.getMonth() + 1) + "/" 
     + padNumber(date.getDate()) + "/" + date.getFullYear(); 
}; 
1

有了正确的库,你可以只用几行代码国际化你的应用程序的整个世界。默认情况下,它会自动本地化的浏览器语言环境的日期,但你也可以定义自己的模式:

dojo.date.locale.format(
    new Date(2007,2,23,6,6,6), 
    {datePattern: "yyyy-MM-dd", selector: "date"} 
); 
// yields: "2007-03-23" 

来源:Formatting dates and times using custom patterns

0

只是另一种选择:

DP_DateExtensions Library

不是说他比其他选择更好,但我喜欢它(当然我不是完全偏)。

1

你撕裂了。toFormattedString功能出优秀的,现在黯然神伤图谱库微软的:

Date.prototype.toFormattedString = function (format) { 
    var dtf = Sys.CultureInfo.DateTimeFormat; 

    if (!format) 
     format = "F"; 

    if (format.length == 1) { 
     switch (format) { 
      case "d": 
       format = dtf.ShortDatePattern; 
       break; 
      case "D": 
       format = dtf.LongDatePattern; 
       break; 
      case "t": 
       format = dtf.ShortTimePattern; 
       break; 
      case "T": 
       format = dtf.LongTimePattern; 
       break; 
      case "F": 
       format = dtf.FullDateTimePattern; 
       break; 
      case "M": case "m": 
       format = dtf.MonthDayPattern; 
       break; 
      case "s": 
       format = dtf.SortableDateTimePattern; 
       break; 
      case "Y": case "y": 
       format = dtf.YearMonthPattern; 
       break; 
      default: 
       throw Error.createError("'" + format + "' is not a valid date format"); 
     } 
    } 

    var regex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z/g; 

    var ret = ""; 
    var hour; 

    function addLeadingZero(num) { 
     if (num < 10) { 
      return '0' + num; 
     } 
     return num.toString(); 
    } 

    function addLeadingZeros(num) { 
     if (num < 10) { 
      return '00' + num; 
     } 
     if (num < 100) { 
      return '0' + num; 
     } 
     return num.toString(); 
    } 

    for (; ;) { 

     var index = regex.lastIndex; 

     var ar = regex.exec(format); 

     ret += format.slice(index, ar ? ar.index : format.length); 

     if (!ar) break; 

     switch (ar[0]) { 
      case "dddd": 
       ret += dtf.DayNames[this.getDay()]; 
       break; 
      case "ddd": 
       ret += dtf.AbbreviatedDayNames[this.getDay()]; 
       break; 
      case "dd": 
       ret += addLeadingZero(this.getDate()); 
       break; 
      case "d": 
       ret += this.getDate(); 
       break; 
      case "MMMM": 
       ret += dtf.MonthNames[this.getMonth()]; 
       break; 
      case "MMM": 
       ret += dtf.AbbreviatedMonthNames[this.getMonth()]; 
       break; 
      case "MM": 
       ret += addLeadingZero(this.getMonth() + 1); 
       break; 
      case "M": 
       ret += this.getMonth() + 1; 
       break; 
      case "yyyy": 
       ret += this.getFullYear(); 
       break; 
      case "yy": 
       ret += addLeadingZero(this.getFullYear() % 100); 
       break; 
      case "y": 
       ret += this.getFullYear() % 100; 
       break; 
      case "hh": 
       hour = this.getHours() % 12; 
       if (hour == 0) hour = 12; 
       ret += addLeadingZero(hour); 
       break; 
      case "h": 
       hour = this.getHours() % 12; 
       if (hour == 0) hour = 12; 
       ret += hour; 
       break; 
      case "HH": 
       ret += addLeadingZero(this.getHours()); 
       break; 
      case "H": 
       ret += this.getHours(); 
       break; 
      case "mm": 
       ret += addLeadingZero(this.getMinutes()); 
       break; 
      case "m": 
       ret += this.getMinutes(); 
       break; 
      case "ss": 
       ret += addLeadingZero(this.getSeconds()); 
       break; 
      case "s": 
       ret += this.getSeconds(); 
       break; 
      case "tt": 
       ret += (this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator; 
       break; 
      case "t": 
       ret += ((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0); 
       break; 
      case "f": 
       ret += addLeadingZeros(this.getMilliseconds()).charAt(0); 
       break; 
      case "ff": 
       ret += addLeadingZeros(this.getMilliseconds()).substr(0, 2); 
       break; 
      case "fff": 
       ret += addLeadingZeros(this.getMilliseconds()); 
       break; 
      case "z": 
       hour = this.getTimezoneOffset()/60; 
       ret += ((hour >= 0) ? '+' : '-') + Math.floor(Math.abs(hour)); 
       break; 
      case "zz": 
       hour = this.getTimezoneOffset()/60; 
       ret += ((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))); 
       break; 
      case "zzz": 
       hour = this.getTimezoneOffset()/60; 
       ret += ((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) + 
       dtf.TimeSeparator + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60)); 
       break; 
      default: 
       debug.assert(false); 
     } 
    } 
    return ret; 
} 
4

添加jQuery UI的插件到您的网页

alert($.datepicker.formatDate('dd M yy', new Date())); 
0

尝试date.js,例如:

<script type="text/javascript"> 
    alert(new Date().toString('M/d/yyyy')); 
</script> 
0

你可以试试:

date = new Date().toLocaleDateString().split("/") 
date[0].length == 1 ? "0" + date[0] : date[0] 
date[1].length == 1 ? "0" + date[1] : date[1] 
date = date[0] + "/" + date[1] + "/" + date[2] 
0

一个简单的格式是:

var d = new Date() // Thu Jun 30 2016 12:50:43 GMT-0500 (Central Daylight Time (Mexico)) 
d.toJSON(); // "2016-06-30T17:50:43.084Z"