【问题标题】:setting day of week in javascript在javascript中设置星期几
【发布时间】:2012-08-01 03:26:48
【问题描述】:

我正在使用 phonegap localNotifications 插件,它指定我可以将通知设置为每周发生。

但是,javascript 日期对象似乎只有 .getDay() 而不是 .setDay()

我有一个我想要设置为重复的星期几的 json 对象,

set_days = {“周一”:假,“周二”:真,“周三”:假,“周四”:真...}

你如何在javascript中设置一天?因为是设置通知,所以日子必须在未来,所以我不想得到最近的“星期三”,而只想得到下一个“星期三”。

这是插件的链接,但我认为这并不是插件所特有的。

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    你如何在javascript中设置一天?

    你的意思是,在本周?一周什么时候开始?

    假设它从星期日开始(如 getDay:0 - 星期日、1 - 星期一等),这将起作用:

    var date, daytoset; // given: a Date object and a integer representing the week day
    
    var currentDay = date.getDay();
    var distance = daytoset - currentDay;
    date.setDate(date.getDate() + distance);
    

    要将日期设置为接下来 7 天内的工作日,请使用以下命令:

    var distance = (daytoset + 7 - currentDay) % 7;
    

    【讨论】:

    • 我在想Bergi之类的东西,但是看到它是一个通知,它只能在未来设置。有没有办法用你的代码做到这一点?
    • 您需要实际调用 date.getDay() 才能使其工作...我会修复它,但由于编辑至少需要 6 个字符,因此您必须自己完成。
    【解决方案2】:

    这是一个已经很好完成的答案,但我找到了一个我想与你分享的解决方案。

    我不擅长更新像Date这样的JS对象,所以我没有提供完整的解决方案来实现Date.proptype.setDay,但想法就在这里:

    // Get a day of the current week
    // Example "Get Monday" : getWeekDay({day:1})
    
    // Args:
    //  - day {Number} Same format that Date.getDay() > Sunday - Saturday : 0 - 6
    //  - inWeeks {Number} Number of week relative to current, -1: Previous week, 1: Next week, 2: in 2 weeks
    //  - date {Date} Use this date instead of now to get relative current week
    //  - atMidnight {Bool} Force result date to be at 00:00:00:00 (instead of keeping current/date time)
    /*export*/ const getWeekDay = ({
      day, inWeeks=0,
      date,
      atMidnight=false, // Force days to be at 00:00:00:00
    }={}) => {
      date = date ? new Date(date) : new Date(); // Loose ref if exist, or take now
      day = (typeof day !== 'number' && typeof day !== 'string')
        ? date.getDay()
        : day;
      date.setDate(date.getDate() + inWeeks * 7 + (day - date.getDay()));
      if (atMidnight) {
        date.setHours(0,0,0,0);
      }
      return date;
    };
    
    // Same that getWeekDay
    // but return an array of all days in the week [Sunday, Monday, .. Saturday]
    // Instead of one single day
    
    // Additional Args:
    // - days: Array of day: {Number} Same format that Date.getDay() > Sunday - Saturday : 0 - 6
     /*export*/ const getWeekDays = ({
      days = [ ...Array(7).keys() ], 
      ...args
    }) => days.map(day => getWeekDay({...args, day}));
    
    // Demo: 
    
    let wed = getWeekDay({inWeek:1, day:3})
    console.log("The next Wednesday is: " + wed);
    console.log("The next one (at midgnight): " + getWeekDay({date: wed, inWeeks:1, atMidnight:true}));
    console.log("All days 2 weeks ago: " + getWeekDays({inWeeks:-2}));
    console.log("Only Monday and Wednesday next week: " + getWeekDays({inWeeks:1, days:[1,3]}));

    补充说明

    如果您真的不要想要松开 ref 并更新您作为 arg 发送的 date,您可以替换此行:

    date = date ? new Date(date) : new Date(); // Loose ref if exist, or take now

    作者:

    date = date ? date : new Date(); // KEEP ref if exist in order to update original, or take now

    【讨论】:

      【解决方案3】:

      您是否正在创建一个新的日期对象来设置?

      var d = new Date();
      d.setDate(11);
      

      会导致

      Tue Aug 14 2012 00:31:56 GMT-0500 (Central Daylight Time)
      

      日期对象确实有一个 set 方法。

      http://www.tutorialspoint.com/javascript/javascript_date_object.htm

      【讨论】:

      • OP 似乎想要 setDay 方法,而不是 setDate 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多