我正在开发Google Apps脚本。我希望用户输入一个类似的模式
MM/DD/YYYY hh:mm:ss
根据模式,我想从字符串中提取信息。该字符串类似于02/29/2016 07:00:00 PM EST
。我想使用用户提供的模式从这个时间戳字符串中提取日期,月份,年份,小时,分钟和秒。
如何在JavaScript中实现这一目标?
答案 0 :(得分:1)
您可以尝试此示例(在Google应用脚本中):
var a = extractDateTimeInfo('MM/DD/YYYY hh:mm:ss', '02/29/2016 07:10:14 PM EST');
Logger.log(a); //output: Year: 2016, month: 02, date: 29, hours: 07, min: 10, sec: 14
var b = extractDateTimeInfo('YYYY-MM-DD hh:mm', '2016-12-26 16:13 PM EST');
Logger.log(b); //output: Year: 2016, month: 12, date: 26, hours: 16, min: 13, sec:
function extractDateTimeInfo(patt, t) {
var YYYYPos = patt.indexOf('YYYY');
var MMPos = patt.indexOf('MM');
var DDPos = patt.indexOf('DD');
var hhPos = patt.indexOf('hh');
var mmPos = patt.indexOf('mm');
var ssPos = patt.indexOf('ss');
var YYYY = YYYYPos >= 0 ? t.substr(YYYYPos, 4) : '';
var MM = MMPos >= 0 ? t.substr(MMPos, 2) : '';
var DD = DDPos >= 0 ? t.substr(DDPos, 2) : '';
var hh = hhPos >= 0 ? t.substr(hhPos, 2) : '';
var mm = mmPos >= 0 ? t.substr(mmPos, 2) : '';
var ss = ssPos >= 0 ? t.substr(ssPos, 2) : '';
return Utilities.formatString("Year: %s, month: %s, date: %s, hours: %s, min: %s, sec: %s", YYYY, MM, DD, hh, mm, ss);
}
但是,我不知道您期望的用户给出的模式类型。但你可以根据YY等其他可能性进行调整。
您可以将结果放入extractDateTimeInfo函数中的数组......
答案 1 :(得分:0)
此正则表达式将起作用(但不检查用户输入的值是否有效)
(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)
<强> Regex Demo 强>
JS代码
var re = /(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)/;
var str = '02/29/2016 07:00:00 PM EST';
var result = str.match(re);
document.writeln(result[1] + '<br>');
document.writeln(result[2] + '<br>');
document.writeln(result[3] + '<br>');
document.writeln(result[4] + '<br>');
document.writeln(result[5] + '<br>');
document.writeln(result[6] + '<br>');
<强> Ideone Demo 强>
答案 2 :(得分:0)
试试这个:
/^(0?\d|1[0-2])\/([0-2]?\d|3[01])\/(\d{1,4})\s([01]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$/
我尽可能地限制输入:
第1组:月份,限制在0到12之间
第2组:天数,限制在0至31之间
第3组:年限,限制为4个字符
第4组:小时数,限制在0至23之间 第5组:会议纪要,限制在0至59之间 第6组:秒数,限制在0到59之间