2009-06-12 34 views

Odpowiedz

31

Ty prototyp metodę, dzięki czemu nie trzeba robić to irytujące zadanie ponownie:

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; 
}; 

(i tak cię można podłączyć te zamienniki, ale nie ma tu żadnej czytelności, zanim ktokolwiek zapyta)


Zgodnie z życzeniem, dodatkowe prototypy do obsługi powyższego urywka.

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; 
}; 

i korzystanie z przykładów:

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

+1 do wielkiego FU to Date ... nice! : D – peirix

+5

Ten kod zależy od posiadania prototypów dla Date.getMonthName(), Date.getDayName() i String.padLeft(). Ten fragment może być bardziej przydatny dla ludzi, jeśli te implementacje zostały dostarczone. –

+1

Kolejna świetna implementacja (jeśli lubisz funkcję datowania PHP) jest tutaj: http://jacwright.com/projects/javascript/date_format – ruquay

7

Musisz dostać starą szkołę na nim:

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

Dzięki odpowiedniej biblioteki można umiędzynarodowienia swoją aplikację dla całego świata z zaledwie kilku linii kodu. Domyślnie automatycznie lokalizuje datę locale przeglądarki, ale można również definiować własne wzory:

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

Od: Formatting dates and times using custom patterns

0

tylko kolejna opcja:

DP_DateExtensions Library

Nie mówiąc to lepiej niż inne opcje, ale lubię go (oczywiście nie jestem całkowicie bezstronny).

1

You rip the.funkcję toFormattedString z Microsoftu doskonałych i teraz niestety brakowało bibliotecznych atlas:

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; 
} 
+0

Dowolny dodatkowe szczegóły/objaśnienia, które mogą pomóc? – JSuar

4

dodać plugin jQuery UI na swojej stronie

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

Spróbuj date.js, na przykład:

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

You Można spróbować:

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

prosty format byłby:

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" 
Powiązane problemy