每天数组中的不同项目-javascript

时间:2018-07-11 20:09:13

标签: javascript arrays date

我有一个脚本,该脚本使按钮重定向到URL(a href)上的whatsapp页面,我需要插入将要联系的电话号码。

我需要做的是每天用不同的数字填充此URL。 示例:

day1-phonen1,

day2-phonen2,

...,

第13天-phonen13,

//(重新开始)

day14-phonen1,

day15-phonen2,

...

<a id="whatsapp" target="_blank" href="https://api.whatsapp.com/send?phone=5519997820734">Link</a>

<script>

    phones= ["phonen1", "phonen2", ..., "phonen13"];
    document.getElementById("whatsapp").href = "https://api.whatsapp.com/send?phone=5519"+ phones[i] +"";  

</script>

4 个答案:

答案 0 :(得分:2)

简单答案:

您可以使用Date来计算自unix时代以来的天数,并根据手机数组的长度对mod进行计数,以获得每24小时移至下一项的索引:

let phones = ["phonen1", "phonen2", "phonen3", "phonen4"];

const ms_per_day = 24 * 60 * 60 * 1000;
// (new Date()).getTime() gets the number of ms since 1 January 1970 00:00:00 UTC
// we divide by ms_per_day and floor to get the number of 24-hour cycles (this will increment each UTC day)
let days_since_epoch = Math.floor((new Date()).getTime() / ms_per_day);
// we mod by the length of phones to get a number in the range [0, phones.length)
let phones_index = days_since_epoch % phones.length;

document.getElementById("whatsapp").href = "https://api.whatsapp.com/send?phone=5519" + phones[phones_index];

console.log("Set link to", document.getElementById("whatsapp").href);
<a id="whatsapp" target="_blank" href="https://api.whatsapp.com/send?phone=5519997820734"> Link  </a>

注意事项:

使用时间is complicated。上面的方法doesn't get the number of days exactly

  

由于天数的长短(由于夏令时的转换),月和年,以大于小时,分钟和秒的单位表示经过时间需要解决许多问题,在尝试之前应进行彻底研究。 / p>

...而且交叉时间仍然是UTC,因此何时上面的代码将切换数字(这不会在午夜)是不明显的。但是它将每24小时执行一次,对于帖子中描述的用例来说应该足够了。

另一个需要注意的是,该数字直到用户刷新页面并重新运行脚本后才真正改变。

答案 1 :(得分:2)

您可以将date对象与for循环一起使用,如下所示:

<a id="whatsapp" target="_blank" href="https://api.whatsapp.com/send?phone=5519997820734">Link</a>

<script>
   phones= ["phonen1", "phonen2", ..., "phonen13"];
   var d = new Date();
   var todayDate = d.getDate();

   for (var i = todayDate; i > 13; i= i-13) {
     todayDate = todayDate - 13;
   }

   document.getElementById("whatsapp").href = "https://api.whatsapp.com/send?phone=5519"+phones[i] + todayDate;
</script>

答案 2 :(得分:0)

使用date对象在数组中创建索引

<a id="whatsapp" target="_blank" href="https://api.whatsapp.com/send?phone=5519997820734">Link</a>

<script>

  var phones= ["phone1","phone2","phone3","phone4","phone5","phone6","phone7","phone8","phone9","phone10","phone11","phone12","phone13","phone14"];
    
  var startOfDay1 = new Date('July 1, 2018 00:00:00');//be aware this is the client timezone
  var diffFromNow = Date.now() - startOfDay1.getTime();//get the difference in ms between now and midnight of "day 1"
  console.log(diffFromNow);
  var diffFromNowDays = diffFromNow/(24*60*60*1000);//turn that into a day value
  var daynum = Math.floor(diffFromNowDays % 14);//constrain to 14 days
  console.log(daynum);//zero based index
    document.getElementById("whatsapp").href = "https://api.whatsapp.com/send?phone=5519"+ phones[daynum] +"";  

</script>

答案 3 :(得分:0)

奥林的答案很好,但您可以根据需要使用当地的午夜时间。将剩余的运算符%与自特定时间点起的整天数一起使用,任何时期都可以。

如果要在当地时间的午夜进行转换,请使用当地的午夜作为纪元和当前日期。使用Math.round删除夏时制效果。

以下内容将更改每天本地00:00:00.001从数组返回的值:

// Number of whole local days since date to today
function daysDiff(date) {
  // Copy date, set to start of day
  var d = new Date(+date);
  d.setHours(0,0,0,0);
  // Get start of current day
  var e = new Date();
  e.setHours(0,0,0,0);
  // Return whole day count
  return Math.round((e - d)/8.64e7);
}

// Select item from array based on number of whole days
// from epoch to today. Default is 1 July 2018
function getFromArray(array, epoch) {
  if (!epoch) {
    // If not provided, use 1 July 2018
    epoch = new Date(2018,6,1);
  }
  var d = daysDiff(epoch);
  return array[d % array.length];
}

var nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14];

// On local date 12 July 2018 returns 12
console.log(getFromArray(nums));