我在显示没有小时、分钟和秒的日期时遇到了问题



我有一个日期数组,我想把它放在一个表(单列(中,我试图在不显示小时、分钟和秒的情况下显示它们。我正在尝试使用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范围内,则带前导零的数字仅被视为八进制,因此文字0809仍将被解释为十进制的89
    • 当处于ECMAScript 5+'use strict'-模式时,引擎需要始终将前导零的数字解析为小数,而不是八进制
    • 尽管这确实意味着,如果你在非严格的上下文中有new Date( 1960, 012, 020 ),那么它将被解释为1960年11月16日(因为Months是基于0的,而不是基于1的,而八进制的12是十进制的10,即11月。是的,这很令人困惑。(
  • 无论如何,old_datesArray<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 );

相关内容

  • 没有找到相关文章

最新更新