0

我在 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"
}

在这里我应该得到“通过”,但我得到“失败”??????

4

1 回答 1

6

使用timeDifferenceof 方法NotesDateTime比较日期实例,而不是标准运算符,如<or >

if (date1.timeDifference(date2) < 0) {
  return "Pass";
} else {
  return "Fail";
}

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

return (date1.timeDifference(date2) < 0) ? "Pass" : "Fail";

timeDifference方法本质上是从调用该方法的日期实例中“减去”传递给它的日期,返回以秒为单位的差值。

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

奖金信息:

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

JavaScript 是一种几乎完全无类型的语言,因此等式运算符 ( ==) 通常仅在用于比较字符串、数字和布尔值时才可靠,而比较运算符 ( <>等) 通常仅在用于比较数字时才可靠。几乎所有其他东西都可以被认为是一个对象(包括数组)。

具有原始数值的变量只是指向当前值的指针。结果,以下表达式将返回true

1 <= 2

但是下面的表达式永远不会是真的:

date1 <= date2

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

date1 = date2

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

于 2013-10-16T04:30:26.487 回答