【问题标题】:CreateDateTime in XPages SSJSXPages SSJS 中的 CreateDateTime
【发布时间】:2013-10-16 03:37:21
【问题描述】:

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

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

【问题讨论】:

  • 在 JavaScript 中,将 { 放在新行上会给解释器增加负担,因为它需要评估是否自动插入 ;是需要的。不要这样做
  • 添加你的 ;正确

标签: javascript xpages xpages-ssjs


【解决方案1】:

使用NotesDateTime 的timeDifference 方法比较日期实例,而不是像&lt; 或&gt; 这样的标准运算符:

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

注意:以上也可以使用conditional operator更简洁地表达:

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

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

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

奖励信息:

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

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

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

1 <= 2

但下面的表达式可能永远为真:

date1 <= date2

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

date1 = date2

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

【讨论】:

  • 额外奖励答案:为了简化日期比较,我在 OpenNTF Domino API 中的 NotesDateTime 类中添加了 isBefore、isAfter、equalsIgnoreTime 等方法。
  • var first = "10/15/2013".split("/") var second = "01/02/2014".split("/") var firstDate=new Date(); firstDate.setFullYear(first[2],(first[0] - 1),first[1]); var secondDate=新日期(); secondDate.setFullYear(second[2],(second[0] - 1 ),second[1]); if (+firstDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多