如何在javascript中将特定格式日期转换为yyyy mm dd格式

如何在javascript中将特定格式日期转换为yyyy mm dd格式,javascript,Javascript,试图转换日期格式,但不起作用。 我的输入是2054年10月23日,输出应该是2054-10-23。如何在javascript中实现这一点? 我的代码不起作用 函数格式日期(日期){ var m=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’]; var d=新日期(日期), 月份=“”+(d.getMonth()+1), 日期=“”+d.getDate(), year=d.getFullYear(); 如果(月长

试图转换日期格式,但不起作用。 我的输入是2054年10月23日,输出应该是2054-10-23。如何在javascript中实现这一点? 我的代码不起作用

函数格式日期(日期){
var m=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’];
var d=新日期(日期),
月份=“”+(d.getMonth()+1),
日期=“”+d.getDate(),
year=d.getFullYear();
如果(月长<2)
月份='0'+月份;
如果(日长<2)
天='0'+天;
返回[年、月、日]。加入('-');
}
风险值日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”];
var结果=格式化日期(日期);

console.log(results.join('\n'),+'\n')这是一个不使用日期对象的脏正则表达式解决方案:

函数格式日期(日期){
var newDates=date.map((项目)=>{
var m=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’];
var day=item.match(/\d+/)[0];
天=天<10?“0”+天:天;
var month=m.indexOf(item.match(/\s([A-Za-z]{3})\s/)[1])+1;
月=月<10?“0”+月:月;
var year=item.match(/\d{4}$/)[0];
返回`${year}-${month}-${day}`;
});
返回新日期;
}
风险值日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”];

console.log(formattate(日期))嗯,我只是手工做的

函数格式日期(日期){
变量月份=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'];
[d,m,y]=拆分日期(“”);
d=d.split(“”).filter(a=>!isNaN(a)).join(“”);
返回[y,m,d]。连接('-');
}
风险值日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”];
dates.forEach(a=>console.log(formatDate(a))
一句话,瞬间!:)

如果你能去掉第-天,第-天,你就可以使用这个很棒的库(它非常灵活和有用)。 ->

var日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日];
log(dates.map(date=>time(date,'DD-MMM-YYYY')。格式('YYYY-MM-DD'))

第一个问题是,将数组传递给不接受数组的函数。其次,您正在向date()传递无效的日期格式

这不使用Date()。它假设最后4个数字是一年,前两个数字是一天,而这个月在中间。不区分大小写,日期格式允许整月

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]));
}
函数格式日期(日期){
var m=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’];
var month=String(m.indexOf(date.split(/[\s-]/)[1].切片(0,3).toLowerCase())+1),
日期=日期。拆分(/[^0-9]/)[0],
年份=日期。切片(-4);
如果(月长<2)
月份='0'+月份;
如果(日长<2)
天='0'+天;
返回[年、月、日]。加入('-');
}
;

对于(var日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”),i=0;i您可以使用以下代码进行此操作

var日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”];
console.log(formattate(日期));
函数格式日期(日期){
var mainArr=[];
如果(!Array.isArray(日期)){
日期=[日期];
}

对于(i=0;i在您的示例中,当数组需要字符串时,您正在将数组传递到函数中。由于
date
不接受您的格式,您也会得到一个无效的日期对象

Date
将接受ISO日期(2054-10-23)、短日期(2054年10月23日)或长日期(2054年10月23日)。您的格式与“长日期”格式非常接近

通过从日期中删除“-th”、“-nd”或“-st”,它将成为可接受的长日期格式,您可以在初始化新的
日期时传递该格式:

新日期(日期.替换(/th | nd | st/,”);
您的函数现在可以按预期工作(假设传入的是字符串而不是数组)

清理示例:

函数格式日期(日期){
const dateObj=新日期(Date.replace(/th | nd | st/,“”));
让year=dateObj.getFullYear();
设month=dateObj.getMonth()+1;
let day=dateObj.getDate();
如果(月长<2)月=“0”+月;
如果(日长<2)天=“0”+天;
返回[年、月、日]。加入(“-”;
}
风险值日期=[“2054年10月23日”、“2014年7月29日”、“2054年5月12日”、“2050年6月20日”、“2059年12月23日”];

dates.forEach(date=>console.log(formatDate(date));
您将数组传递给函数并对单个项进行操作,同时将无效字符串传递给date对象。请查看下面的代码

函数格式日期(日期){
var结果=[]
变量月份=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'];
对于(i=0;iconsole.log(formatDate(dates));
在“版本”修复之后,怀疑2054年10月23日
是否能获得所需的结果。您这样做了。但不幸的是,出于未知原因,您还决定将日期数组传递给无法在数组上工作的函数。@GetSet:如何获得解决方案?“DDth Mmm YYYY”不是
new Date()
接受的格式,一些阅读资料告诉我它需要是
Date.parse()能够理解的字符串
,否则我认为您需要一个时间库或手动解析I