我在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"
}
在这里,我应该得到&#34; Pass&#34;但是我得到&#34;失败&#34; ??????
答案 0 :(得分:6)
使用timeDifference
的{{1}}方法来比较日期实例,而非NotesDateTime
或<
等标准运算符:
>
注意:以上内容也可以使用conditional operator更简洁地表达:
if (date1.timeDifference(date2) < 0) {
return "Pass";
} else {
return "Fail";
}
return (date1.timeDifference(date2) < 0) ? "Pass" : "Fail";
方法基本上“减去”从调用方法的日期实例传递给它的日期,以秒为单位返回差异。
因此,在上面的示例中,如果timeDifference
晚于date2
,则该方法将返回一个负数;如果date1
晚于date1
,则结果为正数;如果两个对象的日期和时间完全相同,则结果为date2
。
BONUS INFO:
标准比较运算符不能用于识别这两个变量值之间的定量差异的原因是因为变量是指向“对象”的指针,而不是“原始”值。
JavaScript是一种几乎完全无类型的语言,因此等于运算符(0
)通常仅在用于比较字符串,数字和布尔值以及比较运算符(==
,{{ 1}}等等通常仅在用于比较数字时才可靠。几乎所有其他东西都可以被认为是一个对象(包括数组)。
具有原始数值的变量仅是指向当前值的指针。因此,以下表达式将返回<
:
>
但是以下表达式永远不会为真:
true
...除非在某些时候你明确地将两个变量都设置为指向同一个对象的指针:
1 <= 2
因为这些是对象,date1 <= date2
不会比较它们所代表的值。 date1 = date2
检查它们是否是指向完全相同的内存对象的指针。除非操作数是原始的,否则操作符的<=
一半是没有意义的,因为两个对象变量永远不会“相互”,它们只能是指向相同对象的指针或指向不同对象的指针;前者会使它们“相等”,后者则不会,即使由两个变量识别的两个对象存储相同的内部值。它们是单独的内存分配,因此JavaScript不会将它们视为彼此相等,并且无法使用标准比较运算符来比较它们的值。