检查给定时刻是否与日期字符串数组中的至少一个日期字符串位于同一周

Dom*_*nik 2 javascript arrays jquery backbone.js momentjs

所以在我的主干应用程序 copyCLDRView 中,我尝试复制/粘贴数周(以及底层组件/数据)。或者稍微抽象一点,“将一周和一周中的模型复制到另一周”。

现在我通常想检查目标周是否至少在一天(从星期一到星期日的目标周)至少有一个组件。为了检查目标周中是否有组件,我有以下日期字符串数组,其中包含所有具有组件的日期:

        debug("[copyCLDRView::initialize] -> allDaysWithComponents: ", this.allDaysWithComponents);
Run Code Online (Sandbox Code Playgroud)

例如,它可以包含以下值(格式为 DDMMYYYY 的日期字符串):

[copyCLDRView::initialize] -> allDaysWithComponents: ["20042015", "21042015", "22042015", "23042015", "24042015", "27042015", "28042015",205"205"205"205"205"205"205" , "11052015", "12052015", "13052015", "14052015", "15052015", "18052015", "19052015", "20052015", "25,2050,120"25,505,20"25,5020"2 27052015”、“28052015”、“29052015”、“01062015”、“02062015”、“03062015”、“04062015”、“05062015”]

现在我必须检查这个数组中是否至少有一个逻辑日期与给定的 Moment.js 对象(进一步称为“时刻”)在同一周,我设法始终是星期一。

paste: function (evt) {
        //this.selected is my momentobject, e.g. Mon May 18 2015 00:00:00 GMT+0200
        if (this.selected && this.selected !== null) {
            //Here I need the check,
            //Pseudocode: if weekHasComponent(this.selected, alldaysWIthComponents) ...
            this.pasteData(this.selected, this.tmpStorage);
        }
    },
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我选择了所选的一周作为从 2015 年 5 月 18 日开始的那一周,现在我希望我的支票在一周中至少一天中有一个组件时返回“true”=> 往上看,如果数组至少包含以下值之一,它应该返回 true :18052015, 19052015, 20052015, 21052015,22052015

所以我在问自己 moment.js 是否可以帮助我在这里进行比较,但我还没有找到任何东西,希望你能帮忙。

最好的问候,多米尼克

小智 6

从各种日期字符串中创建矩对象,然后isSame在调用内部比较它们Array.prototype.some(或者,您可以使用 underscore.js 或 lodash)

var dates = ["20150101", "20150201"]
var testDate = moment("20150102", "YYYYMMDD")
dates.some(function(date){
  return moment(date, "YYYYMMDD").isSame(testDate,"week")
})
//Should return true for this first value of testDate

testDate = moment("20150115", "YYYYMMDD");
dates.some(function(date){
  return moment(date, "YYYYMMDD").isSame(testDate,"week")
})
//Should return false for this
Run Code Online (Sandbox Code Playgroud)