javascript создать дату из строки и привести обратно к строке - PullRequest
0 голосов
/ 02 февраля 2020

Я создаю дату из строк. Я хочу, чтобы у моей даты был последний час и последняя минута данного дня. У меня есть календарь, который заполняет поле ввода датой в форме 01-02-2020 (дд-мм-гггг).

Я хочу добавить часы, минуты и секунды к дате, чтобы она выглядела следующим образом строка: 2020-02-01 23:59:59.

Затем я хочу вычесть x количество дней от даты, которую я создал, чтобы получить начальную дату.

Моя проблема в том, что мои значения даты каким-то образом преобразуются когда я использую функции даты. То, что я делаю:

enddate = new Date(enddate);
enddate = enddate.setHours(23,59,59);

var startdate = new Date();
startdate.setDate( enddate.getDate() - 5);

Затем я хочу объединить мои две даты в строку. Как ?startdate=2020-01-26 00:00:00&enddate=2020-02-01 23:59:59. Где начальная дата имеет часы, минуты и секунды в форме 00:00:00 Эта строка - то, что я в конечном счете хочу, и не имеет значения, как я получаю это значение начала и конечной даты. Шаги выше - только то, что я попробовал И на самом деле формат моих дат в итоговой строке не имеет значения, если это то, что sql может распознать и обработать как дату.

Как я могу выполнить sh это?

Вот мой полный код: enddate содержит значение даты в этой форме: 01-02-2020 (день, месяц, год, европейский стиль)

        datesplit = enddate.split("-");
        enddate = new Date(datesplit[2],datesplit[0],datesplit[1]); //mm-dd-yyyy for US format
        enddate.setHours(23);
        enddate.setMinutes(59);

        var startdate = new Date(enddate);
        startdate.setDate(startdate.getDate() - daysback);
        startdate.setHours(00);
        startdate.setMinutes(00);

        console.log("startdate and enddate: " + startdate + " - " + enddate)
        //startdate and enddate: Tue Jan 28 2020 00:00:00 GMT-0500 (Eastern Standard Time) - Sun Feb 02 2020 23:59:00 GMT-0500 (Eastern Standard Time)

        console.log("startdate and enddate date string: " + startdate.toISOString() + " - " + enddate.toISOString());
        //startdate and enddate date string: 2020-01-27T05:00:00.000Z - 2020-02-03T04:59:00.000Z

Почему добавлено время в последней консоли значение лога, когда дата приведена к ISO Последний формат - то, что я хочу, но значение другое.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Ну, проблема в основном заключалась в том, что вы назначаете одну и ту же переменную для разных целей. Я разделяю это (добавляя 1 ко второму), и это решает:

const enddate = '02-01-2020';
const daysback = 5;
 datesplit = enddate.split("-");
        enddate1 = new Date(datesplit[2],datesplit[0],datesplit[1]); //mm-dd-yyyy for US format 
        enddate1.setHours(23);
        enddate1.setMinutes(59);
        var startdate = new Date(enddate1);
        startdate.setDate(startdate.getDate() - daysback);
        startdate.setHours(00);
        startdate.setMinutes(00);

        console.log("startdate and enddate: " + startdate + " - " + enddate)
        //startdate and enddate: Tue Jan 28 2020 00:00:00 GMT-0500 (Eastern Standard Time) - Sun Feb 02 2020 23:59:00 GMT-0500 (Eastern Standard Time)

        console.log("startdate and enddate date string: " + startdate.toISOString() + " - " + enddate1.toISOString());
        //startdate and enddate date string: 2020-01-27T05:00:00.000Z - 2020-02-03T04:59:00.000Z
0 голосов
/ 02 февраля 2020
var st = "01-02-2020";
var pattern = /(\d{2})\-(\d{2})\-(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

enddate = new Date(dt);
enddate.setHours(23,59,59);

var startdate = new Date(dt);
startdate.setHours(00,00,00);
startdate.setDate( startdate.getDate() - 5);

function js_yyyy_mm_dd_hh_mm_ss (mydate) {
  now = new Date();
  year = "" + mydate.getFullYear();
  month = "" + (mydate.getMonth() + 1); if (month.length == 1) { month = "0" + month; }
  day = "" + mydate.getDate(); if (day.length == 1) { day = "0" + day; }
  hour = "" + mydate.getHours(); if (hour.length == 1) { hour = "0" + hour; }
  minute = "" + mydate.getMinutes(); if (minute.length == 1) { minute = "0" + minute; }
  second = "" + mydate.getSeconds(); if (second.length == 1) { second = "0" + second; }
  return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
}
var query = '?startdate='+js_yyyy_mm_dd_hh_mm_ss(startdate)+'&enddate='+js_yyyy_mm_dd_hh_mm_ss(enddate);
alert(query);
...