我有一个带有日期选择器的输入文本框,当用户选择特定日期时, 09-Dec-2014 的日期将应用于输入文本框。提交时,我希望日期以 yyyymmdd 格式传递给服务器,如 20141209 。那么如何在javascript中转换日期格式呢?
var date = new Date(Date.parse('09-Dec-2014'));
上面的代码为我提供了'无效日期'。
搜索网络寻求解决方案,但无法找到我的问题。
有人能帮助我吗?
感谢。
答案 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