所以我和moment.js一起工作。
我看到您可以使用moment().fromNow()将日期转换为人类友好的格式;
有没有办法做相反的事情呢?
例如,我想将这个--> "2周前“转换为普通的日期格式或UNIX时间戳。
我仔细查看了文档,但什么也找不到。任何方向都会有帮助,谢谢。
发布于 2013-05-25 23:54:02
根据输入字符串的复杂程度/不同程度,您可以这样做:
//parse out the number and the duration
var inputString = "2 weeks ago";
var myRegExp = /^(\d+)\s(\w+)\sago$/;
var results = myRegExp.exec(inputString);
var num = results[1];
var duration = results[2];
moment().subtract(duration,num).toString() //or whatever format you prefer
注意:这将适用于格式为“数字持续时间之前”的输入字符串。
希望这能有所帮助!
发布于 2016-04-01 14:09:05
在某些情况下,.fromNow()
会返回类似于"30+ days ago“的字符串。上面的解决方案中提供的正则表达式不能正确地解析它。
下面是处理这种情况的最新正则表达式:
var myRegExp = /^(\d+)\+?\s(\w+)\sago$/;
发布于 2020-08-24 10:22:52
下面是我用来在当前moment.js语言环境中反转它的方法。我在几个地区进行了测试,它应该适用于每个地区,但可能不是。
将最后两个.toString()函数更改为.valueOf()以获取数值。
Moment现在实际上没有所有语言的周名称数据,所以如果找不到值,函数将假定字符串是周。
一些语言使用翻译函数,而不是内置的值,因此脚本也不会在这些函数上工作!如果您手动指定您的语言数据,那么它应该可以工作。
//test en locale
moment.locale("en");
console.log(reversefromNow("5 days ago"));
console.log(reversefromNow("in 5 days"));
//test ja locale
moment.locale("ja");
console.log(reversefromNow("5 日前"));
console.log(reversefromNow("5 日後"));
function reversefromNow(input) {
let relativeLocale = JSON.parse(JSON.stringify(moment.localeData()._relativeTime));
let pastfutureObject = {
future: relativeLocale.future,
past: relativeLocale.past
};
delete relativeLocale.future;
delete relativeLocale.past;
//detect if past or future
let pastfuture;
for (const [key, value] of Object.entries(pastfutureObject)) {
if (input.indexOf(value.replace("%s", "")) != -1) {
pastfuture = key;
}
}
//detect the time unit
let unitkey;
for (const [key, value] of Object.entries(relativeLocale)) {
if (input.indexOf(value.replace("%d", "")) != -1) {
unitkey = key.charAt(0);
}
}
//if its not in the data, then assume that it is a week
if (unitkey == null) {
unitkey = "w";
}
const units = {
M: "month",
d: "day",
h: "hour",
m: "minute",
s: "second",
w: "week",
y: "year"
};
//Detect number value
const regex = /(\d+)/g;
let numbervalue = input.match(regex) || [1];
//Add if future, subtract if past
if (pastfuture == "past") {
return moment().subtract(numbervalue, units[unitkey]).valueOf();
} else {
return moment().add(numbervalue, units[unitkey]).valueOf();
}
}
https://stackoverflow.com/questions/16754882
复制相似问题