XPage SSJS中的CreateDateTime

Ric*_*mar 0 javascript xpages xpages-ssjs

我在Xpages中编写了ServerSide JavaScript,如下所示,日期格式为"mm/dd/yyyy"

var date1:NotesDateTime=session.createDateTime("10/15/2013")
var date2:NotesDateTime=session.createDateTime("01/02/2014")
if(date1 <= date2)
{
return "Pass"
}
else
{
return "Fail"
}
Run Code Online (Sandbox Code Playgroud)

在这里,我应该得到"通行证",但我得到"失败"??????

Tim*_*ony 6

使用timeDifference的方法NotesDateTime比较日期的情况下,不规范运营商如<>:

if (date1.timeDifference(date2) < 0) {
  return "Pass";
} else {
  return "Fail";
}
Run Code Online (Sandbox Code Playgroud)

注意:使用条件运算符也可以更简洁地表达上述内容:

return (date1.timeDifference(date2) < 0) ? "Pass" : "Fail";
Run Code Online (Sandbox Code Playgroud)

timeDifference方法基本上从调用方法的日期实例"减去"传递给它的日期,以秒为单位返回差异.

因此,在上面的例子中,如果date2晚于date1,则该方法将返回一个负数; 如果date1晚于date2,结果将为正数; 结果将是0两个对象表示完全相同的日期和时间.

奖金信息:

标准比较运算符不能用于识别这两个变量的值之间的定量差异的原因是因为变量是指向"对象"的指针,而不是"原始"值.

JavaScript是一种几乎完全无类型语言,所以等号(==)用于比较字符串,数字和布尔值时一般只可靠,比较操作符(<,>用于比较数字的时候,等)一般是唯一可靠的.几乎所有其他东西都可以被认为是一个对象(包括数组).

具有原始数值的变量仅仅是指向当前值的指针.因此,以下表达式将返回true:

1 <= 2
Run Code Online (Sandbox Code Playgroud)

但是以下表达式永远不会成立:

date1 <= date2
Run Code Online (Sandbox Code Playgroud)

...除非在某些时候你明确地将两个变量设置为指向同一对象的指针:

date1 = date2
Run Code Online (Sandbox Code Playgroud)

因为这些是对象,<=所以不会比较它们所代表的.的=检查,以查看它们是否指向完全相同的内存对象.除非操作数是原始的,否则操作<符的一半是无意义的,因为两个对象变量永远不会"相互",它们只能是指向同一对象的指针或指向不同对象的指针; 前者会使它们"相等",后者则不会,即使由两个变量识别的两个对象存储相同的内部值.它们是单独的内存分配,因此JavaScript不认为它们彼此相等,并且无法使用标准比较运算符比较它们的值.

  • 额外的奖励答案:为了简化日期比较的简单性,我在OpenNTF Domino API中为NotesDateTime类添加了isBefore,isAfter,equalsIgnoreTime等方法. (4认同)