JavaScript日期后缀格式

Tex*_*asB 5 javascript

我已经做了尽职调查,但尚未取得任何成功.使用JavaScript相当绿色我正在寻求一些帮助.我想要显示日期

NOV2012<br>
2<sup>nd</sup><br>
5:00 PM
Run Code Online (Sandbox Code Playgroud)

我有一切工作(不是我的脚本),除了能够得到日期后缀更改为st,nd,rd或th视具体情况而定.

这就是我所拥有的:

<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>
Run Code Online (Sandbox Code Playgroud)

我知道问题出在这个部分:

<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>
Run Code Online (Sandbox Code Playgroud)

但我似乎无法找到正确的解决办法.这就是它所在的位置:

http://www.bcreativeservices.com/

一如既往地谢谢你.

Chr*_*all 13

首先,您有一个语法错误分配序号.它看起来像你最初试图使包含键顺序的对象,但后来改变了它.

这可能是你想要的:

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

哪个有效,但双按位NOT ~~会使您的代码难以理解.我不得不去查看它是什么(我从不使用按位数学)我会建议你不要使用它(当然,除非你有充分的理由使用它).

根据关于这个问题的这个问题,你确实可以提高速度.但是,这些操作只需几微秒,因此改进几乎可以忽略不计,只会使您的代码更难理解.


不久前,我写了一个函数来为日期提供这些后缀.稍作修改后(我将其添加到Date原型中),你会得到:

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

适用于任何有效日期.

编辑:我发现我的序数函数版本可能是不可能阅读的.为了理智,这里是一个具有相同逻辑的不那么简洁的版本:

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";
}
Run Code Online (Sandbox Code Playgroud)