【问题标题】:How to convert date format from dd-MMM-yyyy to yyyymmdd in Javascript?如何在Javascript中将日期格式从dd-MMM-yyyy转换为yyyymmdd?
【发布时间】:2014-12-09 12:42:47
【问题描述】:

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

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

上面的代码给了我'无效日期'。

在网上搜索解决方案,但无法找到我的问题。

谁能帮帮我?

谢谢。

【问题讨论】:

标签: javascript date date-formatting date-conversion


【解决方案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];

【讨论】:

  • for(var j=0;j&lt;months.length;j++){ if(date[1]==months[j]){ date[1]=months.indexOf(months[j])+1; } }可以写成date[1]=months[date[1]]+1
【解决方案2】:
 var date = '09-Dec-2014'.split("-");
 var newDate=date[2]+date[1]+date[0];

一些真正快速的东西可能是,拆分并生成你自己的。

【讨论】:

    【解决方案3】:

    问题在于将所需日期传递给 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

    【讨论】:

    • 我需要反对票的理由。能不能把同样的代码复制粘贴到控制台检查一下?
    • 这在 Firefox 中不起作用——解析与 ISO 8601 不兼容的日期是实现定义的。
    • 感谢让我知道错误和原因。请立即查看
    【解决方案4】:

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

    const dateStr = str => {
        const months = {'jan': "01", 'feb': "02", 'mar': "03", 'apr': "04", 'may': "05", 'jun': "06", 'jul': "07",
                    'aug': "08", 'sep': "09", 'oct': "10", 'nov': "11", 'dec': "12"};
        let year = str.match(/\d{4}$/);
        let month = str.match(/[A-Za-z]{3}/);
        let day = str.match(/^[1-9][0-9]?/);
        let mm, dd;
        if(day && month && year) {
            mm = months[month[0].toLocaleLowerCase()];
            dd = day[0].padStart(2, '0');
            console.log("Input: " + str + ".  date: " + year[0] + "-" + mm + "-" + dd);
        } else if(year){
            console.log("Input: " + str + ".  date: " + year[0]);
        }
        else {
            return false;
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多