如何在Javascript中将日期格式从dd-MMM-yyyy转换为yyyymmdd?

时间:2014-12-09 12:42:47

标签: javascript date date-formatting date-conversion

我有一个带有日期选择器的输入文本框,当用户选择特定日期时, 09-Dec-2014 的日期将应用于输入文本框。提交时,我希望日期以 yyyymmdd 格式传递给服务器,如 20141209 。那么如何在javascript中转换日期格式呢?

var date = new Date(Date.parse('09-Dec-2014'));

上面的代码为我提供了'无效日期'。

搜索网络寻求解决方案,但无法找到我的问题。

有人能帮助我吗?

感谢。

4 个答案:

答案 0 :(得分:2)

 var date = '09-Dec-2014'.split("-");
 var newDate=date[2]+date[1]+date[0];

可能很快就会分裂并生成你自己的东西。

答案 1 :(得分:1)

问题在于您将所需日期传递给Date()对象的格式。

出于某种原因,浏览器出人意料地不支持日期格式“yyyy-mm-dd”,因此失败了。

所有浏览器都支持以下格式,并建议坚持其中一种以避免错误:

var d = new Date(2011, 01, 07); // yyyy, mm-1, dd  
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss  
var d = new Date("02/07/2011"); // "mm/dd/yyyy"  
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"  
var d = new Date(1297076700000); // milliseconds  
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC  

alert(d.getFullYear()+""+(d.getMonth()+1)+""+((d.getDate()<10)?"0"+d.getDate():d.getDate()));

参考:

http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari

答案 2 :(得分:1)

感谢Danyal Sandeelo和Jeeva Jsb的答案。

我能够使用下面给出的代码以 yyyymmdd 格式获取日期。

var date = '09-Dec-2014'.split("-");
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for(var j=0;j<months.length;j++){
    if(date[1]==months[j]){
         date[1]=months.indexOf(months[j])+1;
     }                      
} 
if(date[1]<10){
    date[1]='0'+date[1];
}                        
var formattedDate = date[2]+date[1]+date[0];

答案 3 :(得分:0)

给定的答案仅适用于与格式完全匹配的日期,而我需要一个适用于用户输入的解决方案,该解决方案有时不遵循该格式,因此我创建了一个功能,该功能适用​​于不区分大小写的月份(如一月或空格)或连字符或斜杠分隔符。另外,如果没有给出日期或月份,则仅返回日期。 该函数返回2004年12月30日的2004-12-30 1893年为1893年。 输入的字符串应修整,因为第一个和最后一个字符必须为数字。

    DECLARE @Vendor_Test TABLE (Desired_End_Date DATETIME, Version INT, Status VARCHAR(1), Vendor VARCHAR(10), Class VARCHAR(20), Percent_1 DECIMAL (19,4), Percent_2 DECIMAL (19,4), Effective_Date DATETIME, End_Date DATETIME)
INSERT INTO @Vendor_Test(Desired_End_Date, Version, Status, Vendor, Class, Percent_1, Percent_2, Effective_Date, End_Date)
VALUES
    (NULL, 1, 'A', 'Vendor 1', 'Class 1',  .2000, .0500, '2020-09-23 19:37:30.813', NULL)
    , (GETDATE(), 1, 'A', 'Vendor 1',  'Class 2',  .2000, .0500, '2020-09-23 19:37:30.813', NULL)
    , (NULL, NULL, 'A', 'Vendor 1',  'Class 2',  .2000, .0500, GETDATE(), NULL)
    , (NULL, 1, 'A', 'Vendor 1', 'Class 3', .2000, .0500, '2020-09-23 19:37:30.813', NULL)
    , ('2020-08-25 09:15:45.001', 1, 'A', 'Vendor 1', 'Class 4', .2000, .0500, '2020-08-10 10:00:32.518', NULL)
    , (GETDATE(), NULL, 'A', 'Vendor 1', 'Class 4', .2000, .0500, '2020-08-25 09:15:45.001', NULL)
    , (NULL, NULL, 'A', 'Vendor 1', 'Class 4', .2000, .0500, GETDATE(), NULL)
    , (NULL, 1, 'A', 'Vendor 2', 'Class 1', .2000, .0500, '2020-09-23 19:37:30.813', NULL)
SELECT ROW_NUMBER()OVER(PARTITION BY vrt.Vendor, vrt.Class ORDER BY vrt.Effective_Date ASC) AS 'Desired_Version', vrt.Version, vrt.Status, vrt.Vendor, vrt.Class, vrt.Percent_1, vrt.Percent_2, vrt.Effective_Date, vrt.End_Date, vrt.Desired_End_Date
FROM @Vendor_Test AS vrt