Javascript 与字符串之间的日期增量转换
Javascript date delta conversion to and from string
我正在尝试从字符串 1 year, 5 months and 4 days
.
中提取年月日数据
同样,我希望能够将 1/2/4 转换为 1 year, 2 months and 4 days
在这两种情况下,我想处理 day vs days
或删除天数(如果天数为 0)。
最好的方法是什么?
您可以使用 replace()
回调
function format(str) {
return str.replace(/(\d+)\/(\d+)\/(\d+)/, function(m, m1, m2, m3) {
var s = [];
if (m1 != 0)
s.push(m1 + (m1 == 1 ? ' year' : ' years'));
if (m2 != 0)
s.push(m2 + (m2 == 1 ? ' month' : ' months'))
if (m3 != 0)
s.push(m3 + (m3 == 1 ? ' day' : ' days'))
if (s.length == 3)
return s[0] + ', ' + s[1] + ' and ' + s[2];
else if (s.length == 2)
return s[0] + ' and ' + s[1];
else
return s[0];
})
}
document.write(format('1/2/4') +
'<br>' + format('1/2/0') +
'<br>' + format('0/2/0') +
'<br>' + format('1/2/4') +
'<br>' + format('2/2/4') +
'<br>' + format('1/21/0') +
'<br>' + format('0/2/1') +
'<br>' + format('1/1/1'));
function formatRev(str) {
return str.replace(/^(?:(\d+)\s+(\w+)\s*,\s*)?(\d+)\s+(\w+)(?:\s+and\s+(\d+)\s+(\w+))?$/ig, function(m, m1, m2, m3, m4, m5, m6) {
var s = [0, 0, 0];
s[extract(m2)] = m1;
s[extract(m4)] = m3;
s[extract(m6)] = m5;
return s.join('/');
})
}
function extract(str) {
if (/year/.test(str))
return 0;
else if (/month/.test(str))
return 1;
else if (/day/.test(str))
return 2;
else
return null;
}
document.write(formatRev('5 years and 4 days') +
'<br>' + formatRev('1 year and 2 months') +
'<br>' + formatRev('2 months') +
'<br>' + formatRev('1 year, 2 months and 4 days')
);
我正在尝试从字符串 1 year, 5 months and 4 days
.
同样,我希望能够将 1/2/4 转换为 1 year, 2 months and 4 days
在这两种情况下,我想处理 day vs days
或删除天数(如果天数为 0)。
最好的方法是什么?
您可以使用 replace()
回调
function format(str) {
return str.replace(/(\d+)\/(\d+)\/(\d+)/, function(m, m1, m2, m3) {
var s = [];
if (m1 != 0)
s.push(m1 + (m1 == 1 ? ' year' : ' years'));
if (m2 != 0)
s.push(m2 + (m2 == 1 ? ' month' : ' months'))
if (m3 != 0)
s.push(m3 + (m3 == 1 ? ' day' : ' days'))
if (s.length == 3)
return s[0] + ', ' + s[1] + ' and ' + s[2];
else if (s.length == 2)
return s[0] + ' and ' + s[1];
else
return s[0];
})
}
document.write(format('1/2/4') +
'<br>' + format('1/2/0') +
'<br>' + format('0/2/0') +
'<br>' + format('1/2/4') +
'<br>' + format('2/2/4') +
'<br>' + format('1/21/0') +
'<br>' + format('0/2/1') +
'<br>' + format('1/1/1'));
function formatRev(str) {
return str.replace(/^(?:(\d+)\s+(\w+)\s*,\s*)?(\d+)\s+(\w+)(?:\s+and\s+(\d+)\s+(\w+))?$/ig, function(m, m1, m2, m3, m4, m5, m6) {
var s = [0, 0, 0];
s[extract(m2)] = m1;
s[extract(m4)] = m3;
s[extract(m6)] = m5;
return s.join('/');
})
}
function extract(str) {
if (/year/.test(str))
return 0;
else if (/month/.test(str))
return 1;
else if (/day/.test(str))
return 2;
else
return null;
}
document.write(formatRev('5 years and 4 days') +
'<br>' + formatRev('1 year and 2 months') +
'<br>' + formatRev('2 months') +
'<br>' + formatRev('1 year, 2 months and 4 days')
);