Javascript 解析日期(2011年2月4日上午9:34:48)

Javascript 解析日期(2011年2月4日上午9:34:48),javascript,date,Javascript,Date,我的输入将来自一个变量(Ticket.CreationDate),如下所示 2011年2月4日上午9:34:48(当然会有所不同) 理想情况下,我可以按原样传入变量并得到不同的结果 喜欢 UnknownDateDunc(Ticket.DateCreation)\Outputs=2011年2月4日,星期五 unknownTimeFunc(Ticket.DateCreation)\Outputs=9:34 AM 干预Date.parse()和.toDateString()的操作 我就是想不出来 已解

我的输入将来自一个变量(Ticket.CreationDate),如下所示

2011年2月4日上午9:34:48(当然会有所不同)

理想情况下,我可以按原样传入变量并得到不同的结果 喜欢 UnknownDateDunc(Ticket.DateCreation)\Outputs=2011年2月4日,星期五 unknownTimeFunc(Ticket.DateCreation)\Outputs=9:34 AM

干预Date.parse()和.toDateString()的操作 我就是想不出来

已解决:使用


我建议结合我所知的两个不同的日期库

第一个是DateJS,用于从字符串解析日期。你可以在。您的示例使用其库进行解析(一旦包含适当的引号)

另一个库用于根据日期对象创建格式良好的字符串值。这可在以下网址找到。例如,从该页面:

// Saturday, June 9th, 2007, 5:46:21 PM
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

您有一个静态格式这一事实使得解决方案变得简单

var dateReg = 
    /(\d{1,2})\/(\d{1,2})\/(\d{4})\s*(\d{1,2}):(\d{2}):(\d{2})\s*(AM|PM)/;
function parseDate(input) {
    var year, month, day, hour, minute, second,
        result = dateReg.exec(input);
    if (result) {
        year = +result[3];
        month = +result[1]-1; //added -1 to correct for the zero-based months
        day = +result[2];
        hour = +result[4];
        minute = +result[5];
        second = +result[6];
        if (result[7] === 'PM' && hour !== 12) {
            hour += 12;
        }       
    }
    return new Date(year, month, day, hour, minute, second);
}

创建一个函数,该函数以日期、in-format string和out-format string作为参数

string FormatDate(string date, string informat,string outformat)
{
    var culture = CultureInfo.CreateSpecificCulture("en-US");
    return DateTime.ParseExact(date, informat, culture).ToString(outformat);
}

FormatDate("2/4/2011 9:34:48 AM","M/d/yyyy H:m:s tt","H:m:s")               //9:34:48

您可以从

中获得不同的格式字符串您的输入是否始终具有相同的格式?是的,但日期和时间当然会有所不同,因此mm/dd和hh有时具有1位数字,有时具有2位数字。因此,在返回后,我将如何显示2月4日星期五,2011年?应该注意的是,月份是基于0的索引,所以您必须从结果[1]中减去1。这不是javascript
var dateReg = 
    /(\d{1,2})\/(\d{1,2})\/(\d{4})\s*(\d{1,2}):(\d{2}):(\d{2})\s*(AM|PM)/;
function parseDate(input) {
    var year, month, day, hour, minute, second,
        result = dateReg.exec(input);
    if (result) {
        year = +result[3];
        month = +result[1]-1; //added -1 to correct for the zero-based months
        day = +result[2];
        hour = +result[4];
        minute = +result[5];
        second = +result[6];
        if (result[7] === 'PM' && hour !== 12) {
            hour += 12;
        }       
    }
    return new Date(year, month, day, hour, minute, second);
}
string FormatDate(string date, string informat,string outformat)
{
    var culture = CultureInfo.CreateSpecificCulture("en-US");
    return DateTime.ParseExact(date, informat, culture).ToString(outformat);
}

FormatDate("2/4/2011 9:34:48 AM","M/d/yyyy H:m:s tt","H:m:s")               //9:34:48