繁体   English   中英

JavaScript日期解析加字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM