我已经做了尽职调查,但尚未取得任何成功。使用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/
一如既往地感谢你。
乙
答案 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";
}