Tried to convert date format but not working.
my input is 23th Oct 2054 output shoud be like 2054-10-23. How to do it in javascript?
my code is not working.
function formatDate(date) {
var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
var results=formatDate(dates);
console.log(results.join('\n'),+'\n');
output should be
2054-10-23
2014-07-29
2054-05-12
2050-06-20
2059-12-23
Here is a dirty regex solution that does not use the Date object:
function formatDate(date) {
var newDates = date.map((item) => {
var m = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var day = item.match(/\d+/)[0];
day = day < 10 ? "0" + day : day;
var month = m.indexOf(item.match(/\s([A-Za-z]{3})\s/)[1]) + 1;
month = month < 10 ? "0" + month : month;
var year = item.match(/\d{4}$/)[0];
return `${year}-${month}-${day}`;
});
return newDates;
}
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
console.log(formatDate(dates));
In your example, you are passing an array into your function when it is expecting a string. You are also getting an invalid date object because Date does not accept your format.
Date will accept an ISO Date (2054-10-23), a short date (10/23/2054), or a long date (Oct 23 2054). Your format is very close to the "long date" format.
By removing the "-th", "-nd" or "-st" from your dates, it becomes an accepted long date format which you can pass when initializing a new Date:
new Date(date.replace(/th|nd|st/, ""));
Your function works as intended now (assuming you are passing in a string instead of an array).
Cleaned up example:
function formatDate(date) {
const dateObj = new Date(date.replace(/th|nd|st/, ""));
let year = dateObj.getFullYear();
let month = dateObj.getMonth() + 1;
let day = dateObj.getDate();
if (month.length < 2) month = "0" + month;
if (day.length < 2) day = "0" + day;
return [year, month, day].join("-");
}
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
dates.forEach(date => console.log(formatDate(date)));
I recommend using date-fns or moment when working with dates. Formatting them becomes much easier!
Uh, I just did it manually
function formatDate(date) {
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
[d,m,y]=date.split(' ');
d=d.split('').filter(a=>!isNaN(a)).join('');
return [y,m,d].join('-');
}
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
dates.forEach(a=>console.log(formatDate(a)))
In one word, MOMENT! :)
If you can get rid of the -th, -rd on the day number, you can use this great library (which is extremely flexible and useful).
-> https://momentjs.com/
var dates = ["23 Oct 2054", "29 Jul 2014", "12 May 2054", "20 Jun 2050", "23 Dec 2059"];
console.log(dates.map(date => moment(date, 'DD MMM YYYY').format('YYYY-MM-DD')));
<script src="https://momentjs.com/downloads/moment.js"></script>
<div id='html'></div>
The first problem is that you're passing an array to a function that doesn't accept an array. Secondly you're passing an invalid date format to Date().
This doesn't use Date(). It just assumes the last 4 digits are the year, the first 1-2 digits are the day, and that the month is in the middle. Case insensitive and whole month is allowed in date format.
function formatDate(date) {
var m = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
var month = String(m.indexOf(date.split(/[\s-]/)[1].slice(0, 3).toLowerCase())+1),
day = date.split(/[^0-9]/)[0],
year = date.slice(-4);
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
;
for (var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th dec 2059"], i=0; i<dates.length; i++) {
console.log(formatDate(dates[i]));
}
You can use the below code for this.
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
console.log(formatDate(dates));
function formatDate(date) {
var mainArr = [];
if(!Array.isArray(date)) {
date = [date];
}
for(i=0;i<date.length;i++) {
var dateVal = date[i];
var dateValArr = dateVal.split(' ');
var filterDateArr = [];
for(j=0;j<dateValArr.length;j++) {
var val = dateValArr[j]
if(j==0) {
var val = dateValArr[j].replace(/\D/g, "");
}
filterDateArr.push(val);
}
var filterDate = filterDateArr.join(' ');
var d = new Date(filterDate),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) {
month = '0' + month;
}
if (day.length < 2) {
day = '0' + day;
}
mainArr.push([year, month, day].join('-'));
}
return mainArr;
}
You are passing array to function and operating on single item, also invalid string is passed to Date object. Check out below code
function formatDate(dates) {
var result=[]
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for (i = 0; i < dates.length; i++) {
[d,m,y]=dates[i].split(' ');
day=d.slice(0,d.length-2)
month = (months.indexOf(m)+1).toString();
year = y;
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
result.push([year, month, day].join('-'));
}
return result;
}
var dates = ["23th Oct 2054", "29th Jul 2014", "12th May 2054", "20th Jun 2050", "23th Dec 2059"];
console.log(formatDate(dates));
i have two dates Date1 and Date2 in format ("Wed Apr 21 2020") .I want to compare only months from two date strings.Forex ample Date1="Fri Sep 13 2020" and Date2="Sun Feb 21 2020" and now i want to compare September from DATE1 with February from DATE2 in such a way .
if(September>February){
var X=greater
}else{
var X=smaller
}
how can i achieve this in JAVASCRIPT
The easiest way is to extract the month from the string and get its index by using an array. See an example below:
const Date1 = 'Fri Sep 13 2020';
const Date2 = 'Sun Feb 21 2020';
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const getMonthIndex = date => months.indexOf(date.split(' ')[1]);
if (getMonthIndex(Date1) > getMonthIndex(Date2)) {
// var X=greater
console.log('greater');
} else {
// var X=smaller
console.log('smaller');
}
My current time zone is getting added when converting date using "new Date()".
var date = "2019-06-03T23:32:59.2354387Z";
var date1 = new Date(date);
console.log(date1);
Expected result: 03-Jun-19 23:32:00
Actual result: 04-Jun-19 02:32:00
please find the fiddle here
https://jsfiddle.net/as6htw9p/
More specific to your scenario with keeping the format, this should work. It's just a shame that the integers provided are formatted like '1' instead of '01' so I have had to add a ‘0’ to the start of the variables.
This should output the exact result you want.
var date = new Date();
var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
'Sep', 'Oct', 'Nov', 'Dec']
var day = '0' + (date.getDay() + 2); // 003
day = day.slice(-2) + '-'; // 03-
var month = date.getMonth(); // 5
month = monthNames[month]; // Jun
month = month + '-'; // Jun-
var year = date.getFullYear() + ''; // 2019
year = year.slice(-2) + ' '; // 19
var hour = '0' + date.getHours(); // 018
hour = hour.slice(-2) + ':'; // 18:
var minutes = '0' + date.getMinutes(); // 025
minutes = minutes.slice(-2) + ':'; // 25:
var seconds = '0' + date.getSeconds(); // 06
seconds = seconds.slice(-2); // 06
var now = day + month + year + hour + minutes + seconds;
Date output in JavaScript is by default in local time. You should use UTC get/set if you need GMT format.
Try this:
utc_date = date1.toUTCString();
console.log(utc_date);
This question already has answers here:
JavaScript convert string into Date with format (dd mmm yyyy) i.e. 01 Jun 2012
(6 answers)
Closed 8 years ago.
I have a date in the format yyyymmdd.
Ex: 20141004
What I need to do is to convert it like dd-mmm-yyyy.
Ex: 4 Oct 2014
There is a similar question here: JavaScript convert string into Date with format (dd mmm yyyy) i.e. 01 Jun 2012
The difference is that I have no "/" character to split by.
Another limitation is that I cannot use any external library, as this code is used inside another tool, so I need native JS.
I did it like this:
var date = "20141004";
var y = date.substring(0, 4);
var m = parseInt(date.substring(4, 6), 10);
var d = date.substring(6, 8);
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
mm = months[m - 1];
document.write(d + " " + mm + " " + y);
I have this String :
var str = "Thu, 10 Apr 2014 09:19:08 +0000";
I would like to get this format : "10 Apr 2014"
How can i do that?
var str = "Thu, 10 Apr 2014 09:19:08 +0000";
var d = new Date(str);
var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var b= d.getDate()+' '+month[d.getMonth()]+' '+d.getFullYear();
alert(b);
Check the result in
JSFiddle
You can split the string on spaces and take the second to the fourth items and join:
var d = str.split(' ').slice(1, 4).join(' ');
Demo: http://jsfiddle.net/Guffa/7FuD6/
you can use the substring() method like this,
var str = "Thu, 10 Apr 2014 09:19:08 +0000";
var res = str.substring(5,15);
var str = "Thu, 10 Apr 2014 09:19:08 +0000",
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
d = new Date(str);
d.getDate() + " " + months[d.getMonth()] + " " + d.getFullYear(); //"10 Apr 2014"
The date string you have can be passed into the Date constructor to get a date object, d. The date object has various methods to that gives day, year, month, time etc. Since months are returned as an integer and we need the name, we use an array called months.