Как я могу заставить Datejs возвращать только год, в котором указан только год? - PullRequest
1 голос
/ 19 декабря 2011

Я использую 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 Ответ

3 голосов
/ 20 декабря 2011

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"
...