按crm 2013年的出生日期字段计算年龄

时间:2014-10-05 04:52:38

标签: dynamics-crm crm

我需要编写一个全球javascript代码,按生日字段计算年龄,并将函数从不同的javascript文件调用到特定实体。 从某种原因,我收到错误消息" CalculateAge未定义"在我将实体javascript文件加载到表单后。

这是我在全局文件中写的内容:

CalculateAge: function (birthd)
{
    if (birthd == null) {
        return;}
    var today = new Date().getFullYear();
    year1 = birthd.getFullYear();
    return (today-year1);
}

这是我在我的实体文件中写的,我正在加载到表单:

function onLoad() {

        var birthDate = Xrm.Page.getAttribute("el_birth_date").getValue();
        Xrm.Page.getAttribute("el_age").setValue(CalculateAge(birthDate));

    }

我是Javascript的新手..请问ypu请帮忙吗?

1 个答案:

答案 0 :(得分:3)

您用来计算年龄的JavaScript代码不正确,它不考虑月份和日期。 这是一个正确的版本:

function CalculateAge(birthday, ondate) {
   // if ondate is not specified consider today's date
   if (ondate == null) { ondate = new Date(); }
   // if the supplied date is before the birthday returns 0
   if (ondate < birthday) { return 0; }
   var age = ondate.getFullYear() - birthday.getFullYear();
   if (birthday.getMonth() > ondate.getMonth() || (birthday.getMonth() == ondate.getMonth() && birthday.getDate() > ondate.getDate())) { age--; }
   return age;
}

可以用作:

var birthday = Xrm.Page.getAttribute("new_birthday").getValue();
var age = CalculateAge(birthday);
alert(age);
// age on 1st January 2000, JavaScript Date() object contains months starting from 0
var testdate = new Date(2000, 0, 1, 0, 0, 0);
var testage = CalculateAge(birthday,testdate);
alert(testage);

如果您没有定义CalculateAge,可能您没有在表单中包含包含您的函数的webresource。如果您有两个JS Web资源(一个包含该函数,另一个包含onLoad事件),则两者都需要包含在表单中。

如果您的CRM版本存在异步javascript加载问题,最好将CalculateAge函数包含在与onLoad事件相同的文件中,但如果您希望将它们分开,请查看此博客发布:Asynchronous loading of JavaScript Web Resources after U12/POLARIS

JavaScript函数来自我的博文:Calculate age in Microsoft Dynamics CRM 2011