我怎样才能使Datejs仅返回仅提供年份的年份?

时间:2011-12-19 19:59:52

标签: javascript parsing date user-input datejs

我使用Datjs从用户那里获取日期并将其转换为适合存储在我的数据库中的格式。当我提供月,日和年的日期时,我得到了我想要的,日期格式化的年 - 月 - 日:

    var d1 = Date.parse('02/22/1984');
    console.log(d1.toString('yyyy-MM-dd')); //Prints '1984-02-22'

然而,当我只给一年时,我会在同一年回来,然后是今天的一个月和一天:

    var d1 = Date.parse('1984');
    console.log(d1.toString('yyyy-MM-dd')); //Prints '1984-12-19'

我可以做些什么来确保当用户只输入以下格式返回该年份的年份时

    1984-00-00

同样,如果仅提供月份和年份,我希望它的格式如下:

    1984-02-00

1 个答案:

答案 0 :(得分:3)

Datejs返回一个JavaScript Date对象。该对象旨在表示时间点,并且时间点必须包括月和日。未提供时,Datejs会将这些值默认为当前月份和日期。如果您不想显示该信息,请更改格式设置模式:

var d1 = Date.parse('1984');
console.log(d1.toString('yyyy')); // prints 1984

如果您需要根据用户最初输入的内容更改模式,则需要保存该信息,以便您知道以后要打印的内容。

一个简单的例子如下:

function DatePrinter(input) {
    var s = input.split("/").length;
    this.fmt = ["dd", "MM", "yyyy"].slice(3 - s).reverse().join("-");
    this.date = Date.parse(input);
}

DatePrinter.prototype.toString = function() {
    return (this.date.toString(this.fmt) + "-00-00").slice(0, 10);
}

一些测试:

new DatePrinter("02/22/1984").toString() // "1984-02-22"
new DatePrinter("02/1984").toString() // "1984-02-00"
new DatePrinter("1984").toString() // "1984-00-00"