[英]Javascript date parse plus string
我有一个正在构建的应用程序,我想创建一个带有“加字符串”的日期对象,类似于PHP的strtotime()
方法。
基本上我想说
var date = new Date(“ + 30秒”);
有没有办法这样创建日期? 我希望它能够接受基本时间值:
据我所知,即使是非常受欢迎的库(例如moment.js)也没有实现此功能。 同样, 这种针对Javascript的strtotime实现无法处理您的输入。
所以我想我们必须自己编写它。 这可以帮助您入门:
var parsePlus = (function () {
"use strict";
var converter = {
'second': 1000,
'minute': 1000 * 60,
'hour': 1000 * 60 * 60
};
return function (input) {
var sign = (input[0] === "+" || input[0] !== "-") ? 1 : -1,
current = new Date().getTime();
var parts = input.match(/(\+|-)?(\d+)\s*(second|minute|hour)s?/i);
return new Date(current + sign * parts[2] * converter[parts[3]]);
}
})();
console.log(parsePlus("+30seconds"));
console.log(parsePlus("-1hour"));
Date函数接受数值
new Date(2011, 0, 1, 2, 3, 4, 567) // 1 Jan 2011, 02:03:04.567 in local timezone
您可以使用按空格分割字符串并将其提供给Date对象构造函数的函数
function s2date(s){return new Date(s.split(' '))}
我继续自己创建了一个函数,因为似乎还没有其他东西。
function parseDate(date)
{
if(date == "now" || date == "")
{
return new Date();
}
if(date.charAt("0") == "+")
{
date.replace("+", "");
var cmp = date.split(" ");
if(cmp[1].indexOf("seconds") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 1000));
}
else if(cmp[1].indexOf("minutes") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 1000));
}
else if(cmp[1].indexOf("hours") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 1000));
}
else if(cmp[1].indexOf("days") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 1000));
}
else if(cmp[1].indexOf("weeks") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 7 * 1000));
}
else if(cmp[1].indexOf("months") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 30 * 1000));
}
else if(cmp[1].indexOf("years") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 365 * 1000));
}
}
if(date.charAt("0") == "-")
{
var cmp = date.split(" ");
if(cmp[1].indexOf("seconds") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 1000));
}
else if(cmp[1].indexOf("minutes") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 1000));
}
else if(cmp[1].indexOf("hours") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 1000));
}
else if(cmp[1].indexOf("days") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 1000));
}
else if(cmp[1].indexOf("weeks") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 7 * 1000));
}
else if(cmp[1].indexOf("months") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 30 * 1000));
}
else if(cmp[1].indexOf("years") > -1)
{
return new Date((new Date()).getTime() + (cmp[0] * 60 * 60 * 24 * 365 * 1000));
}
}
return new Date(date);
}
这接受以下输入:
"now" | "": returns current date
Datestring: returns corresponding date (this already worked in new Date(dateString))
[+ | -][#] [timevar]: returns current time [+ | -] [#] of [timevar]
e.g. "+30 seconds"
不可以var date = new Date("+30 seconds");
但是您可以执行以下操作:
var date = new Date(Date.now()+(30 * 1000));
如果要将其构建到函数中,则必须拆分字符串并确定要添加多少毫秒:
function AddDate(string, timestamp){
var s = string.split(' '), increaseby, newtime;
switch(s[1]){
case 'seconds':
increaseby = 1000; // milliseconds in one second
break;
case 'minutes':
increaseby = 1000 * 60; // milliseconds in a minute
break;
}
newtime = (+s[0]) * increaseby;
return timestamp + newtime;
}
(或类似的东西。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.