2012-11-02 125 views
4

我已經完成了我的調查研究,並沒有取得任何成功。 JavaScript相當綠色,我正在尋求一些幫助。我想顯示日期JavaScript日期後綴格式

NOV2012<br> 
2<sup>nd</sup><br> 
5:00 PM 

我所擁有的一切工作(不是我的腳本),除了能夠獲得日期後綴改爲ST,第二,第三,第或視情況而定。

這是我有:

<pre> <abbr title="Month"> 

      <script type="text/javascript"> 
         var d=new Date(); 
         var month=new Array(12); 
         month[0]="Jan"; 
         month[1]="Feb"; 
         month[2]="Mar"; 
         month[3]="Apr"; 
         month[4]="May"; 
         month[5]="Jun"; 
         month[6]="Jul"; 
         month[7]="Aug"; 
         month[8]="Sep"; 
         month[9]="Oct"; 
         month[10]="Nov"; 
         month[11]="Dec"; 
         document.write(month[d.getMonth()]); 
</script></abbr> 

<script type="text/javascript"> 
    var d = new Date() 
    document.write(d.getDate()) 

    ordinal : function (number) { 
      var d = number % 10; 
      return (~~ (number % 100/10) === 1) ? 'th' : 
       (d === 1) ? 'st' : 
       (d === 2) ? 'nd' : 
       (d === 3) ? 'rd' : 'th'; 
     } 
    }); 
    </script> 
    <sup>%</sup> 
    <abbr><script type="text/javascript"> 
    var d = new Date() 
    document.write(d.getFullYear()) 
    </script></abbr> 
       <sub> 

       <script type="text/javascript"> 
         <!-- 
         var currentTime = new Date() 
         var hours = currentTime.getHours() 
         var minutes = currentTime.getMinutes() 
         if (minutes < 10){ 
         minutes = "0" + minutes 
         } 
         document.write(hours + ":" + minutes + " ") 
         if(hours > 11){ 
         document.write("PM") 
         } else { 
         document.write("AM") 
         } 
         //--> 
      </script> 

      </sub> 
</pre> 

我知道這個問題是這一部分:

<pre> 
<script type="text/javascript"> 
    var d = new Date() 
    document.write(d.getDate()) 

    ordinal : function (number) { 
      var d = number % 10; 
      return (~~ (number % 100/10) === 1) ? 'th' : 
       (d === 1) ? 'st' : 
       (d === 2) ? 'nd' : 
       (d === 3) ? 'rd' : 'th'; 
     } 
    }); 


    </script> 

    <sup> % </sup> 
</pre> 

,但我似乎無法制定出正確的修補程序。這是它坐在:

http://www.bcreativeservices.com/

感謝您一如既往。

+0

看看你的控制檯(開發人員工具,螢火蟲,檢查員...)。有一個語法錯誤。 – Ibu

+0

[Convert date date(05/12/2011 to 12th)](http://stackoverflow.com/questions/6003530/convert-date-day-05-12-2011-to-12th) – Alnitak

回答

12

首先,你有一個語法錯誤分配序號。它看起來像像你最初試圖使包含關鍵序數的對象,但後來改變它。

這可能是你所追求的:

function ordinal(number) { 
    var d = number % 10; 
    return (~~ (number % 100/10) === 1) ? 'th' : 
     (d === 1) ? 'st' : 
     (d === 2) ? 'nd' : 
     (d === 3) ? 'rd' : 'th'; 
} 

其中一期工程,但雙位NOT ~~使你的代碼有點難以理解。我必須去查看它是什麼(我從來不使用按位數學計算),我建議你不要使用它(除非你有充分的理由使用它)。

根據this question on the subject,你的速度有所提升。但是,這些操作只需幾微秒,所以改進效果可以忽略不計,只會使代碼更難理解。


不久前,我寫了一個函數來爲日期提供這些後綴。經過一些細微的修改(我將其添加到Date原型)後,您會得到:

function ordinal(date) { 
    return (date > 20 || date < 10) ? ([false, "st", "nd", "rd"])[(date%10)] || "th" : "th"; 
} 

它適用於任何有效日期。

編輯:它發生在我身上,我的版本的序數函數可能是不可能讀取。爲了理智,下面是一個不太精簡的版本,其邏輯相同:

function ordinal(date) { 
    if(date > 20 || date < 10) { 
    switch(date%10) { 
     case 1: 
     return "st"; 
     case 2: 
     return "nd"; 
     case 3: 
     return "rd"; 
    } 
    } 
    return "th"; 
}