我有一个脚本,该脚本使按钮重定向到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>
答案 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));