使用构造的字符串

时间:2016-03-21 08:48:28

标签: marklogic marklogic-8

我想知道为什么werktwel中的这个字符串没问题,但werktniet中的字符串不是我在查询中使用它时的字符串。

当我记录它们时,我看到同样的事情;我记录时"2016-03-21*"string的类型。

// create data

declareUpdate();
xdmp.documentInsert(
       "/example.json",
       {"meting": "783", "bericht": "553", "plant": "01", "timestamp": "2016-03-21T22:32:30.361756"},
       xdmp.defaultPermissions(),
       xdmp.defaultCollections(),
       10)

// query
var nu = new Date();
var beteredatum = nu.getFullYear() + "-" + (Number(nu.getMonth())+1) + "-" + nu.getDate();
var werkniet = beteredatum + "*";
var werktwel = "2016-03-21*";
var a = cts.search(cts.jsonPropertyValueQuery("timestamp", werkniet, "wildcarded")).toArray();
xdmp.log(xdmp.type(werkniet));
a

3 个答案:

答案 0 :(得分:4)

考虑使用Date.toISOString()

var now = new Date(); // Mon Mar 21, 2016 
var isoNow = now.toISOString(); // 2016-03-21T12:20:56Z
var now2 = new Date(isoNow); // Mon Mar 21, 2016 

HTH!

答案 1 :(得分:2)

当你以前尝试过时,我怀疑这个月是十月,十一月或十二月。 (10,11,12)。请注意,您的修复程序还有一个" 0"前置强制月份为2位或更多位数,并转换为字符串。因此,切片(-2)将始终产生最后2位数。

但是我建议使用内置的date和dateTime函数,而不是尽可能使用字符串操作,尤其是对于子组件。 xs.date和xs.dateTime的转换遵循ISO8601规范,这些规范用数字固定,因此更容易分解然后组合。 E.g" 2016-02-21T11:22:33.012-03:00" (dateTime)或" 2016-01-21"

将dateTime的日期(beteredatum)部分作为字符串的示例可以简化为

   var werkniet = fn.adjustDateToTimezone( fn.currentDate(), null ) + "*"

fn.substring( fn.currentDate()+"" , 0, 11)

  fn.formatDate(fn.currentDate(),"[Y0001]-[M01]-[D01]*")

如果您使用数字到字符串转换,我建议定义良好的fn.formatNumber(或xdmp.formatNumber())并提供0填充到固定宽度。

例如将日期作为0填充数字

   fn.formatNumber(fn.dayFromDate( fn.currentDate() ),"00")

如果你坚持内置fn。或xdmp。日期函数可以很好地互操作,没有+/- 1,定义好的字符串到数字或日期转换,并为期望日期的所有marklogic函数生成正确的格式。

答案 2 :(得分:1)

我用这几个月的方式并不好。这样它工作正常。修复程序位于getMonth的切片中。

// query

declareUpdate();
xdmp.documentInsert(
       "/example.json",
       {"meting": "783", "bericht": "553", "plant": "01", "timestamp": "2016-03-21T22:32:30.361756"},
       xdmp.defaultPermissions(),
       xdmp.defaultCollections(),
       10)

// query
var nu = new Date();
var beteredatum = nu.getFullYear() + "-" + ("0" + (nu.getMonth() + 1)).slice(-2) + "-" + nu.getDate();
var werkniet = beteredatum + "*";
var werktwel = "2016-03-21*";
var a = cts.search(cts.jsonPropertyValueQuery("timestamp", werkniet, "wildcarded")).toArray();
xdmp.log(xdmp.type(werkniet));
a