Javascript: indexOf () & substr () не возвращает ожидаемый результат в строке даты - PullRequest
0 голосов
/ 19 февраля 2020

На картинке вы увидите передаваемое значение и все строковые функции, которые я пробовал, но, похоже, ничего не работает. Я даже пытался поместить его в переменную с помощью новой даты (d), но получил «неверную дату». Я также попытался использовать trim (). Если я жестко закодировал строку даты в качестве значения для «d», то все работало как ожидалось. Может кто-нибудь сообщить мне, что я делаю не так? Изображение: JS console.log значений

function convertDate2ISO(dateToConvert){
    var strDate = dateToConvert.trim();
    if (dateToConvert.indexOf("-") > 0) { strDate = dateToConvert.replace(/-/g, ' ');}

    if (dateToConvert.indexOf("/") > 0) {
        var substrValue = dateToConvert.substr(0,3);
        var indexOfValue = dateToConvert.indexOf('/');
        var toStringIndexOfValue = dateToConvert.toString().indexOf('/');
        var sliceValue = dateToConvert.slice(0,2);
        console.log("Incoming value (dateToConvert): " + dateToConvert + "\r\n" + "Using dateToConvert.substr(0,3): " +substrValue+ "\r\nUsing dateToConvert.indexOf('/'): " +indexOfValue+ "\r\nUsing dateToConvert.toString().indexOf('/'): " +toStringIndexOfValue+ "\r\nUsing dateToConvert.slice(0,2): " +sliceValue+ "\r\nUsing dateToConvert.length: " +dateToConvert.length );
        //was trying to use dateToConvert.indexOf('/') to test on, but result was unexpected
        //add 0 to begining if month is a singel digit 
        strDate = "0" + strDate;
    }

    var myDate = new Date(strDate);
    myDate.toISOString(); //"2011-23-12T15:28:46.493Z
    return myDate
}

Значение по умолчанию для входящего параметра: ...

var myDateObj = new Date();
var strDTGReceived = myDateObj.toLocaleDateString();

Вызов функции ...

var dtISOReceivedDate = convertDate2ISO(strDTGReceived);

Значения, которые я получаю, являются ...

Incoming Parameter (dateToConvert): 2/18/2020
Using dateToConvert.substr(0,3): ‎2‎
dateToConvert.indexOf('/'): 3
Using dateToConvert.toString().indexOf('/'): 3
Using dateToConvert.slice(0,2): ‎2
Using dateToConvert.length: 14

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

У вас есть ошибка в вашей функции, когда вы пытаетесь использовать и возвращать переменную date, когда вы определили ее как myDate.

При изменении этого ваш код должен работать так, как показано здесь:

function convertDate(d){
        var strDate = d;
        if (d.indexOf("-") > 0) { 
          strDate = d.replace(/-/g, ' ');
        }

        if (d.indexOf("/") > 0) {
            var substrValue = d.substr(0,3);
            var indexOfValue = d.indexOf('/');
            var toStringIndexOfValue = d.toString().indexOf('/');
            var sliceValue = d.slice(0,2);
            console.log("Incoming value (d): " + d + "\r\n" + "Using d.substr(0,3): " +substrValue+ "\r\nUsing d.indexOf('/'): " +indexOfValue+ "\r\nUsing d.toString().indexOf('/'): " +toStringIndexOfValue+ "\r\nUsing d.slice(0,2): " +sliceValue );
            strDate = "0" + strDate;
        }

        var myDate = new Date(strDate);
        myDate.toISOString(); 
        return myDate 
    }
    
 console.log('Result: ' +convertDate('2/18/2020'));
0 голосов
/ 19 февраля 2020

function convertDate( d ) {
        var myDate = new Date( d );
            if( "" + myDate == "Invalid Date" )return console.info("Invalid Date Format!");
        return myDate.toISOString();
    }
    
     console.log('Result: ' + convertDate('2m18d2020'));
     console.log('Result: ' + convertDate('2/18/2020'));
     console.log('Result: ' + convertDate('2 18 2020'));
     console.log('Result: ' + convertDate('2-18-2020'));
     console.log('Result: ' + convertDate('2.18.2020'));

Вы всегда должны стараться сделать вещи максимально простыми.

function convertDate( d ) {
    var myDate = new Date( d );
        if( "" + myDate == "Invalid Date" )return console.info("Invalid Date Format!");
    return myDate.toISOString();
}

Этот подход будет принимать любые полезные литералы даты и не будет ограничен только в «/» и «-», но сможет принимать все обычно используемые разделители: пробел, запятая, точка, включая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...