我有一个日期数组,我想把它放在一个表(单列(中,我试图在不显示小时、分钟和秒的情况下显示它们。我正在尝试使用toDateString((,但它返回了一个错误(不是函数(。有没有办法只显示这个数组中的日期;
let old_dates = [new Date(1990, 01, 01),new Date(1960, 01, 02),new Date(1996, 05, 22),new Date(1996, 05, 24),new Date(1996, 07, 24),new Date(1996, 10, 25),new Date(1996, 05, 17),new Date(1996, 02, 09),new Date(1996, 06, 30),new Date(1996, 07, 07),new Date(1996, 02, 14),new Date(1997, 11, 29),new Date(1997, 12, 17),new Date(1997, 10, 02),new Date(1997, 08, 06),new Date(1997, 02, 05),new Date(1998, 06, 15),new Date(1999, 10, 02),new Date(1999, 05, 21),new Date(1999, 02, 06),new Date(1999, 05, 22),new Date(2000, 01, 01),new Date(2000, 06, 09),new Date(2000, 09, 22),new Date(2000, 06, 12),new Date(2001, 04, 25),new Date(2001, 04, 11),new Date(2001, 05, 18),new Date(2002, 05, 07),new Date(2002, 03, 29),new Date(2002, 09, 16),new Date(1999, 05, 21),new Date(1999, 05, 21),new Date(1999, 05, 21),new Date(2002, 05, 21),new Date(2002, 05, 11),new Date(2002, 09, 14),new Date(2002, 04, 10),new Date(2002, 09, 10),new Date(2002, 04, 23),new Date(2002, 10, 09)];
console.log(old_dates);
let new_dates = old_dates.toDateString();
console.log(new_dates);
-
提示:不要在文字整数中使用前导零,因为JavaScript引擎可能会将它们解释为基数8(八进制(而不是基数10(十进制(。
- 澄清:ECMAScript 5之前的旧引擎可能将
012
(八进制文字(解释为十进制的10
- ECMAScript 5+要求如果所有数字都在
0-7
范围内,则带前导零的数字仅被视为八进制,因此文字08
或09
仍将被解释为十进制的8
和9
- 当处于ECMAScript 5+
'use strict'
-模式时,引擎需要始终将前导零的数字解析为小数,而不是八进制 - 尽管这确实意味着,如果你在非严格的上下文中有
new Date( 1960, 012, 020 )
,那么它将被解释为1960年11月16日(因为Months是基于0的,而不是基于1的,而八进制的12
是十进制的10
,即11月。是的,这很令人困惑。(
- 澄清:ECMAScript 5之前的旧引擎可能将
-
无论如何,
old_dates
是Array<Date>
,而不是Date
。- 因此,您需要为数组的每个成员调用
toDateString()
- 因此,您需要为数组的每个成员调用
您可以使用for
循环、for-of
循环或Array.prototype.map
来执行此操作,如下所示:
// Using loops:
for( let i = 0; i < old_dates.length; i++ ) {
const dt = old_dates[i];
console.log( dt.toDateString() )
}
for( const dt of old_dates ) {
console.log( dt.toDateString() )
}
// Using Array.prototype.map
const formatted = old_dates.map( dt => dt.toDateString() ).join( ", " );
console.log( formatted );