JavaScript日期后缀格式

时间:2012-11-02 21:50:13

标签: javascript

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

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

除了能够将日期后缀更改为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>

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

<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/

一如既往地感谢你。

1 个答案:

答案 0 :(得分: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";
}