Date list using javascript simple - javascript

Hello guys could give me a little help ?
Code here https://jsfiddle.net/pedrowperez/hgb5ufqw/2/`
this is my work.
HTML
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<p id="demo4"></p>
<p id="demo5"></p>
<p id="demo6"></p>
<p id="demo7"></p>
Javascript
var someDate = new Date();
var Ano_Confirmado = someDate.getFullYear();
var Mes_Confirmado = someDate.getMonth();
var Dia_Confirmado = someDate.getDate();
var Week = 7;
var Day = 1;
var someDateD = new Date(Ano_Confirmado, Mes_Confirmado, (Dia_Confirmado) - Week);
document.getElementById('demo1').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo2').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo3').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo4').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo5').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo6').innerHTML = (someDateD);
someDateD.setDate(someDateD.getDate() + Day);
document.getElementById('demo7').innerHTML = (someDateD);
Result
Tue Jan 26 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Wed Jan 27 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Thu Jan 28 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Fri Jan 29 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Sat Jan 30 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Sun Jan 31 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Mon Feb 01 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Tue Feb 02 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
Wed Feb 03 2016 00:00:00 GMT-0200 (E. South America Daylight Time)
I need to change the date format : Wed Mar 23 2016 15:19:36 GMT-0300 (E. South America Standard Time)
for this format: DD/MM
But I can not find anything Referring dates will list in javascript;

There are two options that come to mind:
Use the Date methods, though this is relatively limiting
Use a library like Moment.js.
Using Date methods
someDate.getDay() + '/' + (someDate.getMonth() + 1);
The (someDate.getMonth() + 1) is required because getMonth() returns the zero-indexed month. Meaning January is 0, February is 1 and so on.
Using Moment.js
Look into a library like . Using Moment you can format dates in endless ways:
moment(someDateD).format('DD/MM');
Here's your updated JSFiddle.

You can create your own function that handles it if you don't need any other complex manipulations with dates.
function formateDate(date) {
function addZero_(num) {
return num < 10 ? ('0' + num) : num);
}
var day = date.getDate();
var month = date.getMonth() + 1;
return addZero_(day) + '/' + addZero_(month);
}
document.getElementById('demo3').innerHTML = formateDate(someDateD);
Also use for to set date values in dom.

Related

Getting value of specific time in next week

I am trying to get the value of next week ( + 7 days) at 09:00. I can get the Date using
new Date().setDate(new Date().getDate() + 7)
For example, it returns: 1619343639426
which translates to
new Date(1619343639426)
Sun Apr 25 2021 15:10:39 GMT+0530 (India Standard Time)
I want to get the value for Sun Apr 25 2021 09:00:00 GMT+0530 (India Standard Time)
how to do that ?
Try
new Date(new Date().setDate(new Date().getDate() + 7)).setHours(9, 0, 0, 0)

A way generate an array of length 30 with random time between two dates using JS?

I have start and end properties in range object. And each property has time value.
range = {
start: Tue Jul 07 2020 10:58:05,
end: Wed Jul 08 2020 10:58:05
}
then I have to make an array of length 30 that contains random time between range.start and range.end.
[Tue Jul 07 2020 11:00:05, Tue Jul 07 2020 13:49:12, Tue Jul 07 2020 15:22:54... Wed Jul 08 2020 12:51:05, Wed Jul 08 2020 15:24:13]
I think I can do it using new Array(30).fill(dates) but have no clue what to put it inside dates.
This converts your dates to timestamps, then generates random numbers in-between and converts those back to dates. Note: added timezone
var start = new Date('Tue Jul 07 2020 10:58:05 GMT-0400').getTime();
var end = new Date('Wed Jul 08 2020 10:58:05 GMT-0400').getTime();
var dates = Array(30).fill().map(() => {
return new Date(
Math.floor(Math.random() * (end - start)) + start
).toString();
});
Results in:
["Wed Jul 08 2020 01:55:53 GMT-0400 (Eastern Daylight Time)"
"Tue Jul 07 2020 16:58:52 GMT-0400 (Eastern Daylight Time)"
"Wed Jul 08 2020 00:02:45 GMT-0400 (Eastern Daylight Time)"​
"Tue Jul 07 2020 15:33:55 GMT-0400 (Eastern Daylight Time)"
"Tue Jul 07 2020 20:16:20 GMT-0400 (Eastern Daylight Time)"
"Tue Jul 07 2020 15:25:33 GMT-0400 (Eastern Daylight Time)"​
"Tue Jul 07 2020 17:15:14 GMT-0400 (Eastern Daylight Time)"
"Wed Jul 08 2020 02:20:32 GMT-0400 (Eastern Daylight Time)"
"Tue Jul 07 2020 23:25:54 GMT-0400 (Eastern Daylight Time)"
...]
Edit: for unique dates you can do something like this:
var start = new Date('Tue Jul 07 2020 10:58:05 GMT-0400').getTime();
var end = new Date('Wed Jul 08 2020 10:58:05 GMT-0400').getTime();
var dates = [];
while(dates.length < 30) {
let date = new Date(
Math.floor(Math.random() * (end - start)) + start
).toString();
if (!dates.includes(date)) {
dates.push(date);
}
}
I wouldn't use this if the start and end dates are very close (within seconds of eachother) and/or the output array is very large. It will block thread.
I'm not big fan of Array(n).fill() just to create an empty array with n undefined elements as the basis for a loop when the array is then discarded.
A for loop is likely less code and more efficient, e.g. (same algorithm as GitGitBoom):
let range = {
start: new Date(2020,6,7,10,58,05),
end: new Date(2020,6,8,10,58,05)
}
let result = [];
for (let s = +range.start, diff = range.end - s, i = 30; i; --i) {
result.push(new Date(s + Math.random() * diff).toString());
}
console.log(result.sort());
If you're prepared to use var, the result array can be declared in the for loop initialiser too.
Assuming you have a randomTimeGenerator, function:
var randomTimes = [];
var i=30; while(i--){randomTimes.push(randomTimeGenerator(i, randomTimes))}

Strange behavior when using Date.setDate() incremental by day

I am working on a functionality where I'd like to iterate particular dates between Date_A and Date_B.
Problem is when 'DateB' is in next month so the iterating process is overlapping to next month. Please see a line 12 of output. It seems like it starts incrementing months instead of days... Any suggestions, please? :)
iter: 0 , inspectedDate: Mon Apr 22 2019 00:00:00 GMT+0000 (UTC)
iter: 1 , inspectedDate: Tue Apr 23 2019 00:00:00 GMT+0000 (UTC)
iter: 2 , inspectedDate: Wed Apr 24 2019 00:00:00 GMT+0000 (UTC)
iter: 3 , inspectedDate: Thu Apr 25 2019 00:00:00 GMT+0000 (UTC)
iter: 4 , inspectedDate: Fri Apr 26 2019 00:00:00 GMT+0000 (UTC)
iter: 5 , inspectedDate: Sat Apr 27 2019 00:00:00 GMT+0000 (UTC)
iter: 6 , inspectedDate: Sun Apr 28 2019 00:00:00 GMT+0000 (UTC)
iter: 7 , inspectedDate: Mon Apr 29 2019 00:00:00 GMT+0000 (UTC)
iter: 8 , inspectedDate: Tue Apr 30 2019 00:00:00 GMT+0000 (UTC)
iter: 9 , inspectedDate: Wed May 01 2019 00:00:00 GMT+0000 (UTC)
iter: 10 , inspectedDate: Sat Jun 01 2019 00:00:00 GMT+0000 (UTC)
iter: 11 , inspectedDate: Wed Jul 03 2019 00:00:00 GMT+0000 (UTC)
iter: 12 , inspectedDate: Sat Aug 03 2019 00:00:00 GMT+0000 (UTC)
iter: 13 , inspectedDate: Wed Sep 04 2019 00:00:00 GMT+0000 (UTC)
example here: https://repl.it/repls/QuerulousSelfreliantDatabase
const inspectedDate = new Date('2019-04-22');
const today = new Date('2019-04-22');
let intervalCorrection = 0;
for (let dayOffset = 0; dayOffset < requestInterval; dayOffset++) {
inspectedDate.setDate(today.getDate() + dayOffset);
console.log('iter: ' + dayOffset, ', inspectedDate: ' + inspectedDate);
}
Try 'reseting' inspectedDate every iteration. Worked fine for me.
Changes I made to your code snippet:
const requestInterval = 14;
let today = new Date('2019-04-22').getDate();
let intervalCorrection = 0;
for (let dayOffset = 0; dayOffset < requestInterval; dayOffset++) {
const inspectedDate = new Date('2019-04-22');
inspectedDate.setDate(today + dayOffset);
console.log('iter: ' + dayOffset, ', inspectedDate: ' + inspectedDate);
}
The problem is that when you setDate and it's more than the current month's days that changes the month. Adding a bigger number again changes the mongth again:
const date = new Date("2019-02-01");
let day = 31;
let offset = 1;
date.setDate(day + offset); //goes to March
offset++;
console.log(date.toString());
date.setDate(day + offset); //goes to April
offset++;
console.log(date.toString());
Since you add a constant 22 (the value of today.getDate()) each time, you very quickly get to 30 and above which will start rolling over each month.
If you just want each consecutive day, then you don't need to have two dates and do a lot of calculations - just use a single date and increment the day by 1 each time - this will give you each day:
const inspectedDate = new Date('2019-04-22');
const requestInterval = 14;
for (let i = 0; i < requestInterval; i++) {
inspectedDate.setDate(inspectedDate.getDate() + 1); //advance one day
console.log('iter: ' + i, ', inspectedDate: ' + inspectedDate);
}
The problem here lies in that you are storing the date variable in a constant and altering its date using setDate only. This results in its moth getting changed which you are not handling.
On iter 9, it sets the date to 22 + 9, i.e, 31. But the month is 4(Apr) which is a 30 day month. So the date changes to Wed May 01 2019 00:00:00 GMT+0000 (UTC)
On iter 10, it sets the date to 22 + 10, i.e, 32. But the month is now 5(May) which is a 31 day month. So the date changes to Sat Jun 01 2019 00:00:00 GMT+0000 (UTC)
On iter 11, it sets the date to 33. The month is 6(Jun). So the date changes to Wed Jul 03 2019 00:00:00 GMT+0000 (UTC)
and so on...
I can think of 2 ways to avoid it:
First
Create a new variable each time
const requestInterval = 14;
const today = new Date('2019-04-22');
let intervalCorrection = 0;
for (let dayOffset = 0; dayOffset < requestInterval; dayOffset++) {
const inspectedDate = new Date('2019-04-22');
inspectedDate.setDate(today.getDate() + dayOffset);
console.log('iter: ' + dayOffset, ', inspectedDate: ' + inspectedDate);
}
Second
Update the month and year as well before updating date
const requestInterval = 14;
const inspectedDate = new Date('2019-04-22');
const today = new Date('2019-04-22');
let intervalCorrection = 0;
for (let dayOffset = 0; dayOffset < requestInterval; dayOffset++) {
inspectedDate.setMonth(today.getMonth());
inspectedDate.setYear(today.getYear());
inspectedDate.setDate(today.getDate() + dayOffset);
console.log('iter: ' + dayOffset, ', inspectedDate: ' + inspectedDate);
}
Firstly, convert your date to milliseconds.
Secondly, iterate ms in day over your date.
const today = new Date('2019-04-22');
let intervalCorrection = 0;
const millisecsInDay = 1000 * 60 * 60 * 24;
for (let dayOffset = 0; dayOffset < 14; dayOffset++) {
const inspectedDate = new Date(today.getTime() + dayOffset * millisecsInDay);
console.log('iter: ' + dayOffset, ', inspectedDate: ' + inspectedDate);
}

How to convert Sun Aug 16 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) to 16.08.2015

Iam trying to convert the Sun Aug 16 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) to 16.08.2015 format but not finding any food solution. Anyone have experience ??
you can try:
var d = new Date('Sun Aug 16 2015 00:00:00 GMT+0200');
console.log(d.getDate()+'/'+ ((d.getMonth()+1)< 10?'0'+(d.getMonth()+1):(d.getMonth()+1)) + '/' + d.getFullYear() ); //16/08/2015

Convert UTCString to yyyy-mm-dd

I am trying UTCString to above format. I can able to convert, problem is after conversion it shows a day before.
var newDate = this.getCellDate(target);
console.log(newDate); --> Dec 05 2014 00:00:00 GMT+0800 (Malay Peninsula Standard Time)
cstDate = newDate.toISOString();
console.log(cstDate); -- > 2014-12-04 --- > **Expected --> 2014-12-05**
Use Date.UTC() method
var now = new Date(), // my date Thu Dec 04 2014 13:02:15 GMT+0300 (RTZ 2 (зима))
year = now.getFullYear(),
month = now.getMonth(),
day = now.getDay(),
hours = now.getHours(),
minutes = now.getMinutes(),
utcDate;
utcDate = new Date(Date.UTC(year, month, day, hours, minutes)); // Thu Dec 04 2014 16:02:00 GMT+0300 (RTZ 2 (зима))
Ext.Msg.alert('UTC Date', Ext.Date.format(utcDate, 'Y-m-d'));
Look at this "Thu Dec 04 2014 16:02:00" - i got utc time(+3 hours)
Fiddle example
Yeah i got the solution. I should not toISOString. instead i need to use toLocaleDateString
custdate = newDate.toLocaleDateString();
dueDate= custdate.split("/").reverse().join("-");

Categories