2016-01-22 105 views
0

我试图根据彩票绘图时间创建一个倒计时。DateTime计算问题

如果当前日期时间大于当前星期三,则显示当前星期六的日期时间。

如果当前日期时间大于当前星期六,则我们显示下一个星期三日期时间。

我不希望它显示当天的最后一个小时。

我正在使用瞬间和时刻的时区。

var current = new Date(moment().tz('America/New_York').format('YYYY-MM-DDTHH:mm:ss')); 
var wednesday = new Date().wednesday(); //if we are past the current Wednesday, it returns next weeks Wednesday 
var wednesdayLimit = new Date(wednesday.getFullYear(), wednesday.getMonth(), wednesday.getDate(), 22, 59, 00); 
var saturday = new Date().saturday(); 
var saturdayLimit = new Date(saturday.getFullYear(), saturday.getMonth(), saturday.getDate(), 22, 59, 00); 

if (current > wednesdayLimit && current < saturdayLimit) 
{ 
    var temp = moment(saturdayLimit).format('YYYY-MM-DD HH:mm'); 
    $('.countdown').data('date', temp); 
    $(".countdown").TimeCircles(); 
} 
else if (current > saturdayLimit && current < wenesdayLimit) 
{ 
    var temp = moment(wednesdayLimit).format('YYYY-MM-DD HH:mm'); 
    $('.countdown').data('date', temp); 
    $(".countdown").TimeCircles(); 
} 

也许我过于复杂了。

https://jsfiddle.net/1bLj4m2t/11/

UPDATE

对不起,让我尝试澄清。星期三或星期六22:59:01 - 23:59:59之间不应显示倒计时。最后1小时和1分钟的一天。这就是为什么我创建*限制变量并将其调整为22:59:00。

所以显示wednesdayLimit当前日期时间将需要 之间Thursdays 00:00:00 and Saturday 22:59:00

现在显示saturdayLimit当前日期时间将需要 之间Sunday 00:00:00 and Wednesday 22:59:00

更新2 https://jsfiddle.net/1bLj4m2t/11/

正在工作,但可能是一个清洁/打赌如何做到这一点?

+0

'否则,如果(电流> saturdayLimit &&电流> saturdayLimit)'相同的条件下两次? –

+0

不好意思更新了那一行。 – Tsukasa

+0

你应该为此做小提琴。目前你获得了什么价值? –

回答

0

我想你只需要检查一下哪个日期接近今天?是星期三还是星期六?换句话说,检查星期六是否大于星期三,反之亦然。 (或者找出哪些是两个及以上)

这里更新小提琴:https://jsfiddle.net/vnathalye/1bLj4m2t/6/

var current = new Date(moment().tz('America/New_York').format('YYYY-MM-DDTHH:mm:ss')); 
var wednesday = new Date().wednesday(); 
var saturday = new Date().saturday(); 

$('.current').html(current); 
$('.wednesday').html(wednesday); 
$('.saturday').html(saturday); 

var currentWeekday = moment(current).weekday(); 
var wednesdayWeekday = moment(wednesday).weekday(); 
var saturdayWeekday = moment(saturday).weekday(); 
var temp = (currentWeekday == wednesdayWeekday || currentWeekday == saturdayWeekday)? current : Math.min(wednesday, saturday); 

$('.countdown').html(moment(temp).fromNow()); // use appropriate time of temp date 

UPDATE:增加逻辑来检查,如果当天是星期三/星期六。

UPDATE 2:我检查过更新后的小提琴,并注意到您正在使用的时刻jj & datejs。你真的需要2个库吗?我会坚持momentjs。

综观current不同的价值观和你在你的提琴V11提到我已经更新了我的代码@https://jsfiddle.net/vnathalye/1bLj4m2t/14/

//var current = moment('2016/01/17 08:00:00', 'YYYY/MM/DD HH:mm:ss'); //display Wed 
//var current = moment('2016/01/20 00:00:00', 'YYYY/MM/DD HH:mm:ss'); //display Wed 
//var current = moment('2016/01/20 22:59:00', 'YYYY/MM/DD HH:mm:ss'); //display Wed last hour 
//var current = moment('2016/01/20 23:59:59', 'YYYY/MM/DD HH:mm:ss'); //display Wed last hour 
//var current = moment('2016/01/21 00:00:00', 'YYYY/MM/DD HH:mm:ss'); //display Sat 
//var current = moment('2016/01/23 00:00:00', 'YYYY/MM/DD HH:mm:ss'); //display Sat 
var current = moment('2016/01/23 22:59:01', 'YYYY/MM/DD HH:mm:ss'); //display Sat last hour 

var wednesday = moment(current).day(3); // sun=0 ... sat=6 
var saturday = moment(current).day(6); 

var currentWeekday = current.weekday(); 
var wednesdayWeekday = wednesday.weekday(); 
//var saturdayWeekday = moment(saturday).weekday(); 
var showWednesday = currentWeekday <= wednesdayWeekday; 
var temp = showWednesday? wednesday : saturday; 

temp = temp.hours(23).minutes(59).seconds(59).milliseconds(999); 

$('.current').html(current.toDate()); 
$('.wednesday').html(wednesday.toDate()); 
$('.saturday').html(saturday.toDate()); 

$('.countdown').html((showWednesday? "Wed" : "Sat") + 
    (temp.diff(current, "minutes") <= 60 ? " last hour" : "")); 

预期的结果:

  1. .day()函数返回本周的当天(与您正在使用的wednesday()/saturday()不同)。这让我简单地比较current平日用的wednesday工作日来决定是否使用wednesdaysaturday进一步计算
  2. 要检查其临时的最后一个小时(星期三/星期六),你只需要检查不同的是< = 60分钟
  3. 我已经使用了日期字符串,因为您在示例中使用了日期字符串,因此在调用moment()时使用了第二个参数'YYYY/MM/DD HH:mm:ss'。参考:https://github.com/moment/moment/issues/1407知道使用力矩()
  4. 的推荐方式虽然显示我用.toDate()的日期,但你可以使用.format()
+0

更新后,希望我能够澄清它好一点。 – Tsukasa

+0

我更新了小提琴。我得到它的工作,但也许你知道一个更清洁的方式/更好的方式? https://jsfiddle.net/1bLj4m2t/9/ – Tsukasa

+0

它在$('。current')内显示“Current:Invalid Date”。这是我正在看的正确版本吗? –