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/

いつもありがとうございます。

B

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~~が 2 つあると、コードを理解するのが少し難しくなります。私はそれが何であるかを調べる必要がありました (私はビット演算を使用したことはありません)。使用しないことをお勧めします (もちろん、使用する正当な理由がない限り)。

件名に関するこの質問によると、速度が向上します。ただし、これらの操作には数ミリ秒しかかからないため、改善はごくわずかであり、コードを理解しにくくするだけです。


少し前に、日付にこれらの接尾辞を提供する関数を書きました。少し変更した後 (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 に答える