2016-03-21 6 views
1

Ich frage mich, warum diese Zeichenfolge in werktwel ist in Ordnung, aber die Zeichenfolge in werktniet ist nicht, wenn ich sie in meiner Abfrage verwenden.Mit konstruierten Zeichenfolge

Wenn ich sie protokolliere, sehe ich das gleiche; "2016-03-21*" und der Typ ist für beide string, wenn ich das auch protokolliere.

// 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 

Antwort

1

Die Art, wie ich mit den Monaten arbeitete, war nicht in Ordnung. So funktioniert es gut. Der Fix befindet sich in der Scheibe von 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 
4

Betrachten Date.toISOString() mit:

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!

2

Wenn Sie es zuvor versucht haben, vermute ich, der Monat war Oktober, November oder Dezember. (10,11,12). Beachten Sie, dass in Ihrem Fix auch eine "0" vorangestellt ist, die den Monat auf 2 oder mehr Ziffern setzt und in eine Zeichenfolge konvertiert. Daher erzeugt der Slice (-2) immer die letzten 2 Ziffern.

Allerdings schlage ich vor, mit den eingebauten date- und dateTime-Funktionen zu arbeiten, anstatt die Stringmanipulation, wo immer dies möglich ist, speziell für Subkomponenten. Die Konvertierung von xs.date und xs.dateTime folgt den ISO8601-Spezifikationen, die mit numerischen Werten festgelegt sind, so dass sie leichter zerlegt und zusammengesetzt werden können. ZB "2016-02-21T11: 22: 33.012-03: 00" (dateTime) oder "2016-01-21"

Ihr Beispiel, um den Datumsteil (beteredatum) von dateTime als String zu erhalten, kann vereinfacht werden als

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

oder

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

oder

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

Wenn Sie mit der Nummer arbeiten, um Strin g Konvertierungen Ich empfehle die fn.formatNumber (oder xdmp.formatNumber()), die gut definiert sind und bieten 0 Padding auf feste Breite.

beispiels den Tag als 0 gepolsterte Anzahl

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

zu erhalten, wenn Sie auf die builtin fn bleiben. oder xdmp. Datumsfunktionen, die gut zusammenarbeiten, keine +/- 1, gut definierte Zeichenkette für Zahlen- oder Datumskonvertierungen und erzeugen das korrekte Format für alle Marklogic-Funktionen, die Daten erwarten.