具有选项列表值的日期公式

时间:2011-11-17 16:43:48

标签: salesforce

我需要为日期字段创建公式。 新日期字段ID

的公式

新日期字段=旧日期字段+没有月份

月数来自选项列表。

2 个答案:

答案 0 :(得分:1)

这个简单的要求暴露了salesforce公式语言的一些限制。即,下面的公式(基于this)将起作用,但它非常不优雅,并且几乎不适合允许的脚本大小。希望其他人有更好的解决方案。

DATE(
    year(BaseDate) + floor((month(BaseDate) + Add_Months__c)/12) 
        + if(and(month(BaseDate)=12,Add_Months__c>=12),-1,0),

    if( mod( month(BaseDate) + Add_Months__c , 12 ) = 0, 12 , mod( month(BaseDate) + Add_Months__c , 12 )),

    min(
        day(BaseDate),
        case(
            max( 
                mod( 
                    month(BaseDate) + Add_Months__c , 12 
                ) , 
                1
            ),
            9,30,
            4,30,
            6,30,
            11,30,
            2,28,
            31
        )
    )
)

答案 1 :(得分:1)

直接从选项列表中提取值(如果不是不可能)将非常困难。显然,将选项列表值转换为数字会导致大幅增加。以下公式做你想做的事情

DATE(
    FLOOR((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))) / 12) + YEAR(CalcDate__c),
    MOD((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))), 12),
    1) + (DAY(CalcDate__c) - 1)

CalcDate__c是原始日期,AddMonths__c是您的选择列表。

该公式确实附带了警告,它有时会滚动到下个月(例如,添加1个月到2011年3月31日将产生5/1/2011而不是4/30/2011)。如果您需要解决这个问题,可以使用杰里米答案中的CASE语句。

该公式的另一个问题是,遗憾的是, 5.7k 字符超过了最高5k。

但是,您可以首先创建一个工作流程规则,将选项列表值复制到隐藏的数字字段中,然后使用编译后的大小为 1.9k 的公式:

DATE(
    FLOOR((MONTH(CalcDate__c) + AddMonths2__c) / 12) + YEAR(CalcDate__c),
    MOD((MONTH(CalcDate__c) + AddMonths2__c), 12),
    1) + (DAY(CalcDate__c) - 1)

在这种情况下,AddMonths2__cAddMonths__c的数字副本。

此公式将保存在Salesforce中并且应该实现您要执行的操作(尽管它与第一个公式具有相同的月末翻转)