您好我试图对此做相反的事情,因为现在它从2015/Sau/01
更改为2015/01/01
我不知道如何更改回2015/Sau/01
,我怎么能用这个脚本做这个,因为我需要保持语言环境语言,请帮助我。
var date = f.task_end_date.value.split("/");
var months = ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir','Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd'];
for(var j=0;j<months.length;j++){
if(date[1]==months[j]){
date[1]=months.indexOf(months[j])+1;
}
}
if(date[1]<10){
date[1]='0'+date[1];
}
var formattedDate = date[0]+date[1]+date[2];
答案 0 :(得分:3)
这是一种简单的方法,只需根据路径编号分割日期并更改月份部分:
var months = ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir', 'Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd'];
var dateArray = "2015/01/01".split("/");
console.log(dateArray);
var newDate="";
if (dateArray[1] <= 12) {
newDate = dateArray[0] + "/" + months[dateArray[1] - 1] + "/" + dateArray[2];
alert(newDate);
}
我使用"2015/01/01"
作为日期示例,您只需要更改它。
答案 1 :(得分:2)
完全避免正则表达式:
var months = ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir',
'Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd']
function transformMonth (str, toText) {
str = str.split('/')
str[1] = toText ? months[str[1] - 1] : 1 + months.indexOf(str[i])
return str
}
console.log(transformMonth('2015/Sau/01', false)) // --> '2015/01/01'
console.log(transformMonth('2015/01/01', true)) // --> '2015/Sau/01'
我通常不喜欢正则表达式,但是这个很好地完成了工作:
/ # start regex
(\d+) # capture as many digits as possible
\/ # until hitting a forward slash
(\w+) # capture as many characters as possible
\/ # until a forward slash
(\d+) # capture the remaining numbers
/ # end regex
然后,您所要做的就是返回第一个捕获组(年份)加上(1 + months.indexOf(month)
(月)加上第三个捕获组(日)。
var months = ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir',
'Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd']
// this transforms '2015/Sau/01 to '2015/01/01'
function toNumberMonth (str) {
return str.replace(/(\d+)\/(\w+)\/(\d+)/, function (date, year, month, day) {
return year + '/' + (1 + months.indexOf(month)) + '/' + day
})
}
回头只是调整正则表达式以在所有三个捕获组中使用(\d+)
:
// this transforms '2015/01/01' to '2015/Sau/01'
function toTextMonth (str) {
return str.replace(/(\d+)\/(\d+)\/(\d+)/, function (date, year, month, day) {
return year + '/' + months[month-1] + '/' + day
})
}
答案 2 :(得分:1)
你应该能够取代:
for(var j=0;j<months.length;j++){
if(date[1]==months[j]){
date[1]=months.indexOf(months[j])+1;
}
}
if(date[1]<10){
date[1]='0'+date[1];
}
使用:
date[1] = months[parseInt(date[1],10)-1];
parseInt
会将您的字符串01
通过12
并为您提供整数值,然后您减去一个以获取索引并查找等效的月份名称(我猜,虽然我不熟悉那种特定的语言。)
换句话说,最终的代码是:
var date = f.task_end_date.value.split("/");
var months = ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir','Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd'];
date[1] = months[parseInt(date[1],10)-1];
var formattedDate = date[0] + date[1] + date[2];
如果您愿意,也可以避免使用parseInt()
,因为当您减去一个字符串时,Javascript会将字符串视为一个数字(通过ToNumber
操作):
date[1] = months[date[1]-1];
它可能不会减少实际的工作,因为无论是显式的还是隐式的,都必须完成从字符串到数字的转换(由于隐式转换必须处理十六进制值的可能性,但无论如何都不太重要。)
因此,如果您重视代码的简洁性,那肯定是一种选择。我自己更喜欢显式版本,但您可能还有其他优先事项。