ES6解构日期

时间:2016-12-18 08:40:17

标签: javascript ecmascript-6

有没有办法解构日期?

我知道对象你可以做这样的事情。

var o = {p: 42, q: true};
var {p, q} = o;

console.log(p); // 42
console.log(q); // true

在ES6中有更好的方法吗?是否存在像对象解构这样的东西?

function getFormattedDate(date) {
    return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`;
}

2 个答案:

答案 0 :(得分:3)

您可以创建一个继承自Date对象的对象,为月,日和年添加getter,然后您可以对其进行解构。虽然它有一些开销,但如果你经常使用日期,这可能是值得的。此外,您可以解决问题,例如需要添加1个月。

  

虽然您可以将getter直接添加到Date对象,但这可以   是一种不好的做法。您可以在此主题中更多地了解它 - Why is extending native objects a bad practice?

class EDate extends Date {  
  get month() {
    return this.getMonth() + 1;
  }
  
  get day() {
    return this.getDate();
  }
  
  get year() {
    return this.getFullYear();
  }
}

const getFormattedDate = ({ month, day, year }) => `${month}/${day}/${year}`

console.log(getFormattedDate(new EDate()));

// since Date can receive another Date as input, you can do this as well

const date = new Date();

console.log(getFormattedDate(new EDate(date)));

答案 1 :(得分:0)

实际上是的,您可以对Date()进行解构,但是您仅限于几种方法。

    let {now,UTC,parse} = Date, {log} = console;

    //returns current time in milliseconds
    log(now());

    //returns a date format for UTC
    log(UTC(96, 1, 2, 3, 4, 5));

    //parses a date to milliseconds
    log(parse('04 Dec 1995 00:12:00 GMT'));

这是可以在没有防御的情况下进行解构的唯一方法。像getMonth()getYear()之类的方法必须定义new Date。但是,您可以计算毫秒数(例如now()/1000返回seconds)。但是进行准确的转换将是一个挑战。