5

我已经对此进行了尽职调查,但尚未取得任何成功。使用 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/

一如既往地感谢你。

4

1 回答 1

13

首先,分配序数时出现语法错误。看起来您最初试图创建一个包含键序号的对象,但后来更改了它。

这可能是你想要的:

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";
}
于 2013-03-04T18:23:40.023 回答