【问题标题】:I am Having problems with showing dates without hours, minutes and seconds我在显示没有小时、分钟和秒的日期时遇到问题
【发布时间】:2020-11-20 10:40:35
【问题描述】:

我有一个日期数组,我想将它们放入一个表格(单列)中,并且我试图在不显示小时、分钟和秒的情况下显示它们。我正在尝试使用 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 将它们解释为 Base 8(八进制)而不是 Base 10(十进制)>
  • old_datesArray<Date>,而不是Date,所以没有.toDateString() 函数。
  • @Phil 我相信.call 部分是不必要的。他们也可能想要Array.prototype.join
  • 那么有没有办法通过 js 把它们放在一个只有日期的 html 表中?
  • const new_dates = old_dates.map(d => d.toDateString())

标签: javascript date


【解决方案1】:
  • 提示:不要在文字整数中使用前导零,因为 JavaScript 引擎可能将它们解释为 Base 8(八进制)而不是 Base 10(十进制)。

    • 澄清一下:早于 ECMAScript 5 的旧引擎可能012(八进制数字文字)解释为十进制的 10
    • ECMAScript 5+ 要求带有前导零的数字被视为八进制如果所有数字都在0-7 范围内,那么文字0809 仍将被解释如89 十进制。
    • 在 ECMAScript 5+ 'use strict'-mode 中,引擎需要始终将前导零的数字解析为小数,而不是八进制。
    • 虽然这确实意味着如果您在非严格上下文中使用 new Date( 1960, 012, 020 ),那么这将被解释为 1960 年 11 月 16 日(因为月份是从 0 开始,而不是从 1 开始,而八进制的 1210 十进制,即第 11 个月: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 );

【讨论】:

  • 非常感谢戴。我将使用 Array.prototype.map 方法并将日期更改为个位数。
  • @RobG 感谢您的更正。我已经修改了答案。
  • 你也可以使用this库来格式化日期。
  • 仅供参考:numeric literals.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多