Get Millis using only Year and Month - javascript

I need to get a MILLIS value only with Year and Month.
Important: I don't wanna to use Days, Hours, Seconds, etc.
I'm using the following:
for (var i = 0; i <= 11; i++) {
var d = new Date(date);
d.setMonth(i);
var span = $("<span>").addClass("calElement").attr("millis", d.getTime());
}

You need to construct a new date using the given year and a month from the loop, time is automatically set to 00:00:00.000.
var y = new Date(date).getFullYear(),
msecs = new Date(y, i, 1).getTime();
A live demo at jsFiddle.
If you want to include the month[i], just loop from 1 to 12.

Related

How to display time range on iteration?

I am trying to run a for loop that has to loop 8 times. On each iteration I want the loop to increment the value by +1 hour.
The final output should be in this time format:
opening hours:
08:00, 09:00, 10:00,11:00, 12:00, 13:00, 14:00, 15:00,16:00
In this case timediff mentioned in the for...loop holds the value of 8.
var minutesToAdd = 60;
var currentDate = new Date("2022-04-10 08:00:00");
var futureDate = new Date(currentDate.getTime() + minutesToAdd * 120000).toLocaleTimeString();
for (let i = 0; i < timeDiff; i++) {
console.log(futureDate, 'futureeee date');
}
Your code never updates futureDate in the loop. Also, when you expect to print 08:00 in the example, you should print currentDate when no minutes have been added yet.
I would also suggest you use the native function setMinutes and getMinutes to add a number of minutes to a date object.
You say that timeDiff has a value of 8, but then you say you want 9 outputs (8:00 ... 16:00), so you'll need an additional iteration.
Finally, to get the hh:mm output format, there are several solutions. One is to choose a locale that uses a format that is close to what you need, and express you want the short format (without seconds):
let timeDiff = 9; // One more to also output 16:00
let minutesToAdd = 60;
let currentDate = new Date("2022-04-10 08:00:00");
for (let i = 0; i < timeDiff; i++) {
console.log(currentDate.toLocaleTimeString("en-SE", { timeStyle: "short" }));
currentDate.setMinutes(currentDate.getMinutes() + minutesToAdd);
}
You can then use a simple for-loop to iterate from 0 up to and including timeDiff, incrementing each iteration by 1.
for (let hours = 0; hours <= timeDiff; hours += 1) {
// ...
}
Instead of a starting date we'll start with a timestamp Date.parse("2022-04-10 08:00:00"). This allows us to add the time from the loop to the timestamp and create a new date.
const date = new Date(currentTimestamp + hours*HOURS);
To only display the time I've taken the liberty of using the solution provided by the answer of trincot.
const MILLISECOND = 1 , MILLISECONDS = MILLISECOND;
const SECOND = 1000*MILLISECONDS, SECONDS = SECOND ;
const MINUTE = 60*SECONDS , MINUTES = MINUTE ;
const HOUR = 60*MINUTES , HOURS = HOUR ;
const timeDiff = 8;
var currentTimestamp = Date.parse("2022-04-10 08:00:00");
for (let hours = 0; hours <= timeDiff; hours += 1) {
const date = new Date(currentTimestamp + hours*HOURS);
console.log(date.toLocaleString(undefined, { timeStyle: "short" }));
}

Jquery Current Date Less Than X, Change At Specific Time (Instead of Midnight)

I'm building a carousel that shows featured content specific to Friday nights. Below you can see on load I trigger a click to the upcoming Friday night's content using new Date(). Accounts of course wants this content to change Friday night after the event is over at 9pm instead of midnight.
function loadFirstMovie(){
$el.find(settings.children).each(function(i){
var t = $(this)
var currentDate = new Date() // get current date
var itemDate = new Date(t.attr('date'))
if (currentDate < itemDate){
t.trigger("click");
return false;
}
});
}
Does anyone know how I can pass a time into new Date(), but NOT a specific day?
var itemDate = new Date("2015-07-17T21:00:00");
//Creates a Date specific to 17th of July 2015, 9:00PM UTC
var year = 2015;
var month = 7;
var day = 17;
var hours = 21;
var minutes = 0;
var seconds = 0;
var milliseconds = 0;
var alternativeItemDate = new Date(year, month, day, hours, minutes, seconds, milliseconds);
You can use that to create a date with current year/month/day combination and the needed hours/minutes combination.

Adding days to a date in a loop, javascript

I feel like there is something I'm missing about this, I'm trying to add 7 days to a current date, then 14, then 21. What I'm ending up with is a compounding of intervals rather than current date + 7, then current date + 14 etc.
var date = new Date();
for(var i = 0; i < 4; i++){
var tempDate = date;
var repeatson = tempDate.setDate(date.getDate() + (i*7));
var repeats = new Date(repeatson);
console.log(repeats);
}
Results in:
"2015-03-17T21:03:13.326Z"
"2015-03-24T21:03:13.326Z"
"2015-04-07T20:03:13.326Z"
"2015-04-28T20:03:13.326Z"
Rather than the desired, 24th, 31st & 8th
var tempDate = date; simply assigns a reference to date. You are not creating a copy. Similarly, setDate does not return a new date, it mutates the date itself.
One solution would be to create a copy:
var tempDate = new Date(date);
Your loop could be simplified to
var repeats = (new Date(date)).setDate(date.getDate() + (i*7))

How to get the 7 days in a week with a currentDate in javascript?

(first, sorry for my bad english, i'm a beginner)
I have a chart of percent by date. I would like to display every day of the current week in the x-axis.
So, i tried to find how to get the seven days of the week.
that's what i have :
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay();//to set first day on monday, not on sunday, first+1 :
var firstday = (new Date(curr.setDate(first+1))).toString();
for(var i = 1;i<7;i++){
var next = first + i;
var nextday = (new Date(curr.setDate(next))).toString();
alert(nextday);
}
the alert begins well...until the end of the month. That's what i got :
1 : "Mon 27 Feb 2012 ..."
2 : "Tue 28 Feb 2012 ..."
3 : "Wed 29 Feb 2012 ..."
4 : "Thu 01 Mar 2012 ..."
5 : "Sat 31 Mar 2012 ..."
6 : "Sun 01 Apr 2012 ..."
So, as you can see, it switches the friday and... strangely it switch to the good date...4 weeks later...
So, do you have a better solution for me, or maybe you could just help me and say what is the problem.
Thank you!
I'm afraid you have fallen into one of the numerous traps of object mutation. :)
The problem is that, in the line "var nextday = ...", you are changing the date saved in "curr" on every iteration by calling setDate(). That is no problem as long as next is within the range of the current month; curr.setDate(next) is equivalent to going forward one in this case.
The problems begin when next reaches 30. There is no February 30, so setDate() wraps around to the next month, yielding the 1st of March - so far so good. Unfortunately, the next iteration calls curr.setDate(31), and as curr is the 1st of March (remember that the object referenced by curr is changed in each iteration), we get... March 31! The other strange values can be explained the same way.
A way to fix this is to copy curr on each iteration and then call setDate(), like so:
for (var i = 1; i < 7; i++) {
var next = new Date(curr.getTime());
next.setDate(first + i);
alert(next.toString());
}
Thank you all,
I understood that everytime i change the curr value and that was the problem.
All your solutions are working, but i'll prefer the simplest one, the one from #denisw, which I copy there for anybody else with the same problem :
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay();
var firstday = (new Date(curr.setDate(first+1))).toString();
for(var i = 1; i < 7; i++) {
var next = new Date(curr.getTime());
next.setDate(first+i);
alert(next.toString());
}
Once again, thank you all, for your quick answers and your help!
You can add date and day. The former goes from 1 to 28..31 and the latter from 0 to 6. What should the Date type do if you set the date to -3?
The solution is to convert all values to milliseconds.
var ONE_DAY_IN_MILLIS = 1000*60*60*24;
var curr = new Date();
// Get offset to first day of week
// Note: Depending on your locale, 0 can be Sunday or Monday.
var offset = curr.getDay() * ONE_DAY_IN_MILLIS;
// Date at the start of week; note that hours, minutes and seconds are != 0
var start = new Date( curr.getTime() - offset );
for( var i=0; i<7; i++ ) {
var nextDay = new Date( start.getTime() + ( i * ONE_DAY_IN_MILLIS ) );
...
}
The problem is that you are modifying your curr date and creating a new date at the same time. There are two ways to do this:
Either never modifiy your curr date object and create new Dates:
var msInDay = 1000 * 60 * 60 * 24;
function addDays(date, days) {
return new Date(date.getTime() + days * msInDay);
}
var curr = new Date();
var first = addDays(curr, -curr.getDay() + 1);
alert(first);
for(var i = 1; i<7; i++) {
var next = addDays(first, i);
alert(next);
}
Or modify your curr date object consistently:
var curr = new Date();
curr.setDate(curr.getDate() - curr.getDay() + 1);
alert(curr);
for(var i = 1; i<7; i++) {
curr.setDate(curr.getDate() + 1);
alert(curr);
}
​
let curr = new Date;
let week = []
for (let i = 1; i <= 7; i++) {
let first = curr.getDate() - curr.getDay() + i
let day = new Date(curr.setDate(first)).toISOString().slice(0, 10)
week.push(day)
}
console.log('week:', week);
jsfidde: https://jsfiddle.net/sinh_nguyen/v9kszn2h/4/

Javascript validation of date select boxes

I have created 3 select boxes containing days, months and year. What I really would like is to check after the user has selected a date, if the date is over a year from the current date a message is displayed or so.
Im a little stumped on what to do. Any gidance would be great.
Thanks
var ddlYear = document.getElementById('ddlYear');
var ddlMonth = document.getElementById('ddlMonth');
var ddlDay = document.getElementById('ddlDay');
var y = ddlYear[ddlYear.selectedIndex];
var m = ddlMonth[ddlMonth.selectedIndex];
var d = ddlDay[ddlDay.selectedIndex];
// past
var dt = new Date((y+1), (m-1), d);
var moreThanOnYearAgo = dt < new Date();
// future
var dt2 = new Date((y-1), (m-1), d);
var moreThanOnYearAhead = dt2 > new Date();
The y+1 is because if we're adding one year, and are still less than new Date() (today), then it's more than one year ago.
The m-1 is because months in the Date constructor are an enum, which means January is 0.
Don't reinvent the wheel one more time. Use a library that does validation.
There are 31556926000 milliseconds in a year. Just convert that date to a timestamp and subrtact the current date from it. If the result is greater than 31556926000 from it, is over a year away.
var userDate = new Date("11/29/2010");
var now = new Date();
var year_ms = 31556926000;
if ( userDate.getTime() - now.getTime() >= year_ms ) {
// A year away
} else {
// less than a year away
}

Categories

Resources