CRM 2011: установить поле даты и времени из строки с помощью javascript

Я пытаюсь создать новую запись, в которой одно из полей является полем DataTime.

Я всегда получаю сообщение «Формат даты и времени для четверга 01 сентября 19:25:20 2011 недействителен или значение выходит за пределы поддерживаемого диапазона». ошибка.

Я пробовал несколько вариантов формата. С Date.parse, Date.parseExact,... Вот моя последняя попытка:

//date input format = 2011-02-15 11:05:22

    var year = register_date.substring(0, 4);
    var month = register_date.substring(5, 7);
    var day = register_date.substring(8, 10);
    var hours = register_date.substring(11, 13);
    var minutes = register_date.substring(14, 16);
    var seconds = register_date.substring(17, 19);


    var datetime = Date(Date.UTC(year, month, day, hours, minutes,seconds)); 

    //var datetime = Date.parseExact(register_date, "yyyy-mm-dd HH:mm:ss");

    regFields[4] = new CRMField("ave_subscriptiondate", datetime);

person ThdK    schedule 01.09.2011    source источник
comment
поэтому формат даты начинается как yyyy-mm-dd HH:MM:SS, но что вы хотите, чтобы он закончился?   -  person AsherMaximum    schedule 01.09.2011
comment
также, где вы пытаетесь создать эту запись?   -  person AsherMaximum    schedule 01.09.2011
comment
Я пытаюсь создать регистрационную запись для курса. Получение данных из записи электронной почты. (чтение xml в теле). Я знаю, что поле «дата подписки» — это поле «дата-время». Но я не знаю, в каком формате я должен передать дату.   -  person ThdK    schedule 01.09.2011


Ответы (1)


Включите код ниже, и вы можете просто сделать:

datetime.toCRMFormat();

Этот код был найден в этом полезная JS-библиотека CRM 2011

// Formats the date to CRM format
Date.prototype.toCRMFormat = function()
{
    var d = this;
    var f = d.Format("yyyy-mm-ddThh:MM:ss+" + (-d.getTimezoneOffset()/60) + ":00");

    return f;
}

// Formats the date into a certain format
Date.prototype.Format = function(format)
{
   var d = this;
   var f = "";

try {
    f = f + format.replace( /dd|mm|yyyy|MM|hh|ss|ms|APM|\s|\/|\-|,|\./ig , 
    function match()
    {
    switch(arguments[0])
    {
     case "dd": 
        var dd = d.getDate();
        return (dd < 10)? "0" + dd : dd;
     case "mm":
        var mm = d.getMonth() + 1;
        return (mm < 10)? "0" + mm : mm; 
     case "yyyy": return d.getFullYear();
     case "hh": 
        var hh = d.getHours();
        return (hh < 10)? "0" + hh : hh;
     case "MM": 
        var MM = d.getMinutes(); 
        return (MM < 10)? "0" + MM : MM;
     case "ss": 
        var ss = d.getSeconds(); 
        return (ss < 10)? "0" + ss : ss;
     case "ms": return d.getMilliseconds();
     case "APM": 
        var apm = d.getHours(); 
        return (apm < 12)? "AM" : "PM";
     default: return arguments[0];
    }
    });
}
catch(err)
{
}

   return f;
}

Или, если вы хотите, чтобы они были обычными функциями вместо расширений на дату, таких как dateToCRMFormat(datetime)

// Formats the date to CRM format
function dateToCRMFormat (date)
{
    return dateFormat(date, "yyyy-mm-ddThh:MM:ss+" + (-date.getTimezoneOffset()/60) + ":00");
}


// Formats the date into a certain format
function dateFormat (date, format)
{
   var f = "";

try {
    f = f + format.replace( /dd|mm|yyyy|MM|hh|ss|ms|APM|\s|\/|\-|,|\./ig , 
    function match()
    {
    switch(arguments[0])
    {
     case "dd": 
        var dd = date.getDate();
        return (dd < 10)? "0" + dd : dd;
     case "mm":
        var mm = date.getMonth() + 1;
        return (mm < 10)? "0" + mm : mm; 
     case "yyyy": return date.getFullYear();
     case "hh": 
        var hh = date.getHours();
        return (hh < 10)? "0" + hh : hh;
     case "MM": 
        var MM = date.getMinutes(); 
        return (MM < 10)? "0" + MM : MM;
     case "ss": 
        var ss = date.getSeconds(); 
        return (ss < 10)? "0" + ss : ss;
     case "ms": return date.getMilliseconds();
     case "APM": 
        var apm = date.getHours(); 
        return (apm < 12)? "AM" : "PM";
     default: return arguments[0];
    }
    });
}
catch(err)
{
}

   return f;
}
person phloopy    schedule 01.09.2011
comment
Спасибо за ваш ответ! Думаю, почти готово, но что такое datetime в этом ответе? - person ThdK; 01.09.2011
comment
Это соответствует переменной с таким же именем в вашем коде. Это объект даты javascript, который вы хотите преобразовать в формат, ожидаемый CRM. - person phloopy; 01.09.2011
comment
Я получаю следующую ошибку: Объект не поддерживает свойство или метод toCRMFormat. - person ThdK; 01.09.2011
comment
И вы включили функцию под ним? Я добавил обычную функцию, которую вы можете вызывать вместо того, чтобы добавлять ее в прототип Date. Попробуйте. - person phloopy; 01.09.2011
comment
Кажется, мой объект данных не знает ни одного метода с именем Format или getTimeZoneOffset. Должен ли я импортировать библиотеку? - person ThdK; 01.09.2011
comment
Метод getTimezoneOffset является частью встроенного объекта Date. Метод Format взят из библиотеки. ссылка в ответе. Я обновлю ответ, чтобы включить эту функцию. - person phloopy; 02.09.2011
comment
Большое спасибо! Мне придется использовать это еще много раз, поэтому ваш ответ очень полезен! Наконец-то я использовал расширения на Date. - person ThdK; 02.09.2011
comment
в автономной версии dateFormat d.getFullYear() должен быть date.getFullYear() в строке: case yyyy: return d.getFullYear(); - person thehhv; 16.08.2012