【问题标题】:Check if a given moment lies in same week than at least one datestring out of an array of datestrings检查给定时刻是否与日期字符串数组中的至少一个日期字符串位于同一周
【发布时间】:2015-06-22 22:18:33
【问题描述】:

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

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

        debug("[copyCLDRView::initialize] -> allDaysWithComponents: ", this.allDaysWithComponents);

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

[copyCLDRView::initialize] -> allDaysWithComponents: [“20042015”、“21042015”、“22042015”、“23042015”、“24042015”、“27042015”、“28042015”、“29042015”、“30042015”、 “01052015”、“11052015”、“12052015”、“13052015”、“14052015”、“15052015”、“18052015”、“19052015”、“20052015”、“21052015”、“22050555”、“26012” ”、“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);
        }
    },

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

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

最好的问候, 多米尼克

【问题讨论】:

  • 使用Array.some()
  • 您可以使用 moment 调用 week 来检查是否有两天在一年中的同一周,然后比较 year,例如 . moment(date).week() === moment(date2).week() && moment(date).year() === moment(date2).year()。确保为一周设置正确的本地,以便知道它应该从星期一开始,美国的默认值为星期日。
  • @Nit 抱歉,我没听懂,尤其是内置的范围检查。我只是再次查看了文档:/

标签: javascript jquery arrays backbone.js momentjs


【解决方案1】:

从各种日期字符串中创建时刻对象,然后在对 Array.prototype.some 的调用中使用 isSame 比较它们(或者,您可以使用 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

【讨论】:

  • 哦,刚刚忘记了这个问题,几天前自己想通了。不过谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2022-08-19
相关资源
最近更新 更多