【译】用javascript格式化时间和日期的10种方法
原文地址:链接
javascript内置了
Date
对象支持生成时间和日期,利用Date对象的各种方法能够返回各种与时间和日期相关的值。
在使用日期和时间之间,我们先声明一个变量,并用new运算符和Date()构造函数给它赋值。new运算符和Date()构造函数的主要功能就是创建一个date对象并将它存储在变量中,代码如下:
[php]
var d=new Date();
[/php]
因此,变量d中便储存了一个date对象。我们现在可以使用这个对象的各种方法了。
- 格式1:date-month-year
以下是我们将要使用的方法:
- getDate();
- getMonth();
- getFullYear();
- 格式二:month/day/year
这和上面的方法几乎一模一样,如下所示:
[php]
<script type="text/javascript">
<!--
var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth();
curr_month++;
var curr_year = d.getFullYear();
document.write(curr_month + "/" + curr_date + "/" + curr_year);
//-->
</script>
[/php]
输出为:
- 格式三:date-month name-year(比如:27-March-2013)
getMonth()函数以数值的形式将月份返回给我们,为了将这个值转换wie月份名,我们将创建一个数组,里面包含12个月份的名字。代码如下:
[php]
<script type="text/javascript">
<!--
var
m_names = new Array("January", "February", "March", "April", "May","June","July","August","September","October", "November", "December");
var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
document.write(curr_date + "-" + m_names[curr_month]
+ "-" + curr_year);
/* The last two lines above have
to placed on a single line */
//-->
</script>
[/php]
注意:为了代码的可读性,我将数组中的代码写成了多行。在实际项目中,你应该把它们写在一行。
这一次,我们实用new操作符和array()构造函数,将十二月份的名字存储在数组中。变量m_names中存储着月份名的数组。
getMonth()返回的值正是存储着月份名的数组的索引值,javascript中数组的索引值也是从0开始,所以我们不必要再去为getMonth()的返回值加1了。
输出为:
- 格式四:类似 21st March 2001
这种格式我们为日期包含一个上标,思路是确定日期然后基于日期值确定相应的上标。代码如下:
[php]
<script type="text/javascript">
<!--
var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var d = new Date();
var curr_date = d.getDate();
var sup = "";
if (curr_date == 1 || curr_date == 21 || curr_date ==31)
{
sup = "st";
}
else if (curr_date == 2 || curr_date == 22)
{
sup = "nd";
}
else if (curr_date == 3 || curr_date == 23)
{
sup = "rd";
}
else
{
sup = "th";
}
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
document.write(curr_date + "<SUP>" + sup + "</SUP> " + m_names[curr_month] + " " + curr_year);
//-->
</script>
[/php]
我们先初始化了一个包含上标值的变量sup,使用if-else-if条件语句,我们可以确认当前的日期值并据此分配相应的sup值。
输出为:
- 格式5. date month name year(例如:Wednesday 21st March 2013) getDay()方法会返回一个能够确定日期是星期几的数字,0代表星期日(sunday),1代表星期一,依次类推。这次我们将再次用到数组,用来包含星期名。代码如下:[php] <script type="text/javascript"> <!-- var d_names = new Array("Sunday", "Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday"); var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September","October", "November", "December"); var d = new Date(); var curr_day = d.getDay(); var curr_date = d.getDate(); var sup = ""; if (curr_date == 1 || curr_date == 21 || curr_date ==31) { sup = "st"; } else if (curr_date == 2 || curr_date == 22) { sup = "nd"; } else if (curr_date == 3 || curr_date == 23) { sup = "rd"; } else { sup = "th"; } var curr_month = d.getMonth(); var curr_year = d.getFullYear(); document.write(d_names[curr_day] + " " + curr_date + "<SUP>"+ sup + "</SUP> " + m_names[curr_month] + " " + curr_year); //--> </script> [/php] 输出为:
- 格式6:小时:分钟
我们可以通过日期对象的getHours()和getMinutes()方法获得小时和分钟。getHours()返回0-23之间的值。代码如下:
[php]
<script type="text/javascript">
<!--
var d = new Date();
var curr_hour = d.getHours();
var curr_min = d.getMinutes();
document.write(curr_hour + " : " + curr_min);
//-->
</script>
[/php]
输出为:
- 格式7:用AM和PM来校正时间 代码如下所示: [php] <script type="text/javascript"> <!-- var a_p = ""; var d = new Date(); var curr_hour = d.getHours(); if (curr_hour < 12) { a_p = "AM"; } else { a_p = "PM"; } if (curr_hour == 0) { curr_hour = 12; } if (curr_hour > 12) { curr_hour = curr_hour - 12; } var curr_min = d.getMinutes(); document.write(curr_hour + " : " + curr_min + " " + a_p); //--> </script> [/php] 代码实在是非常简单。首先,我们定义一个变量a_p.由curr_hour的值来决定我们是给它赋值AM还是PM。 接下来,我们改变curr_hour的值,如果它的值为0(比如12:40AM),curr_hour的值应该为12.另外,如果curr_hour的值比12大,那么我们应该减去12把它转化为12小时制。 然而,我们任然没有解决单个数字的问题。 输出为:
- 格式8:两位数分钟 为了在在单个数字前面加上0,我们首先必须确认getMinute()返回的值是否是单个数字。我们采用的办法是把数值转化为字符串并检测其长度。如果长度为1,那么我们就在它的前面加上0。代码如下: [php] <script type="text/javascript"> <!-- var a_p = ""; var d = new Date(); var curr_hour = d.getHours(); if (curr_hour < 12) { a_p = "AM"; } else { a_p = "PM"; } if (curr_hour == 0) { curr_hour = 12; } if (curr_hour > 12) { curr_hour = curr_hour - 12; } var curr_min = d.getMinutes(); curr_min = curr_min + ""; if (curr_min.length == 1) { curr_min = "0" + curr_min; } document.write(curr_hour + " : " + curr_min + " " + a_p); //--> </script> [/php] javascript是一种松散类型的语言,这意味着变量的数据类型可以轻易的改变。因此,存储数字的那个变量也可以让它存储字符串。 输出为:
- 格式9:使用秒和毫秒 使用getSeconds和getMilliseconds()可以返回秒和毫秒的值。 [php] <script type="text/javascript"> <!-- var d = new Date(); var curr_hour = d.getHours(); var curr_min = d.getMinutes(); var curr_sec = d.getSeconds(); var curr_msec = d.getMilliseconds(); document.write(curr_hour + ":" + curr_min + ":" + curr_sec + ":" + curr_msec); //--> </script> [/php] 输出为:
- 格式10:GMT时间 以上讨论的所有方法都是从客户端(浏览器)计算时间,javascript同时也提供了我们类似的的、方法获得UTC时间。一下是方法列表: getUTCDate(): Date getUTCMonth(): Month getUTCFullYear(): Year (4 digit) getUTCDay(): Day getUTCHours(): Hours getUTCMinutes(): Minutes getUTCSeconds(): Seconds getUTCMilliseconds(): Milliseconds
这两个星期效率一直不好,不知道是不是因为没有继续学习新知识。回顾《javascript权威指南》和《javascript高级程序设计》过程中并没有很强的收获感,当然这也很正常,毕竟不是第一次看了,唯一的收获就是一些曾经不是很清楚的概念在脑海里慢慢的清晰了些。点: 分: 秒