jQuery日期格式化

202

我该如何使用jQuery格式化日期。我正在使用以下代码,但出现错误:

 $("#txtDate").val($.format.date(new Date(), 'dd M yy'));
请建议一个解决方案。

1
Microsoft JScript 运行时错误:'$ .format' 为空或不是对象。 - DotnetSparrow
41
获取当前日期的简洁代码:new Date().toJSON().substring(0,10) - Mike Causer
它的格式是f格式(双精度f)。 - jorrebor
Mike Causer,你真是个天才! - Sean Kendle
13
警告!华丽的代码:new Date().toJSON().substring(0,10) 很好用,但它返回的日期是以 GMT 为准的!由于我们比GMT晚7个小时,在下午5点后使用该代码将会返回错误的日期。我花了几个小时找到原因,感到非常沮丧。参考链接 - JayRO-GreyBeard
显示剩余4条评论
24个回答

221

在你的页面中添加 jQuery UI 插件。

 $("#txtDate").val($.datepicker.formatDate('dd M yy', new Date()));

2
这就是我一直在寻找的答案,尤其是因为我在其他地方使用了jQuery UI。 - nzifnab
有没有办法获取日期 + 2年? - Serjas
1
var currentDate = new Date(); currentDate.setFullYear(currentDate.getFullYear() + 2); - Thulasiram
很遗憾它不支持时间格式化 =S - Thomas
4
这是官方文档的链接:http://api.jqueryui.com/datepicker/#utility-formatDate - Guillaume Husta
多么奇怪的库。'dd M yy' 被理解为 'dd MMM yyyy'。这个库有它自己的格式理解。 - Nick

112

jQuery dateFormat 是一个单独的插件。您需要使用 <script> 标签显式加载它。


10
好的,使用其他函数:例如,请参见这里 - Pekka
33
如果能使用jQuery完成,那么就不会有一个针对日期格式化的jQuery插件了,对吧? - Pekka
1
我无法确定这是否应该是一个笑话...它几乎是个好主意@pekka。此外,这是正确的答案。 - jcolebrand
1
jQuery的dateFormat与jQuery Validate不兼容,纯JavaScript版本也是如此。 - Kunal B.
4
很难相信原生的jQuery没有格式化日期的功能。这个问题已经存在5年了,现在还是这样吗? - felwithe
显示剩余3条评论

108

如果您不想使用jQuery / jQuery插件,可以使用简单的js date()函数作为替代方法:

例如:

var formattedDate = new Date("yourUnformattedOriginalDate");
var d = formattedDate.getDate();
var m =  formattedDate.getMonth();
m += 1;  // JavaScript months are 0-11
var y = formattedDate.getFullYear();

$("#txtDate").val(d + "." + m + "." + y);

请查看:10种使用JavaScript格式化时间和日期的方法

如果您希望在日/月前添加前导零,这是一个完美的示例: JavaScript为日期添加前导零

如果您想要在时间中添加前导零,请尝试以下内容: getMinutes() 0-9 - 如何使用两个数字?


很方便像 @sein 所做的那样添加秒数。 - wpcoder
这很好,直到用户想要最近的日期或将日期输入Date对象。那么如何在与输入日期相同的格式下获取6个月前的日期? - Sanjok Gurung

40

这是我刚刚创建的一个非常基本的函数,它不需要任何外部插件:

$.date = function(dateObject) {
    var d = new Date(dateObject);
    var day = d.getDate();
    var month = d.getMonth() + 1;
    var year = d.getFullYear();
    if (day < 10) {
        day = "0" + day;
    }
    if (month < 10) {
        month = "0" + month;
    }
    var date = day + "/" + month + "/" + year;

    return date;
};

使用:

$.date(yourDateObject);

结果:

dd/mm/yyyy

谢谢,超级酷,易于使用。我尝试了,完美运行。 - Adnan Zaheer
超棒的解决方案 - Maulik patel

32

我正在使用Moment JS。它非常有帮助,易于使用。

var date = moment(); //Get the current date
date.format("YYYY-MM-DD"); //2014-07-10

29

ThulasiRam,我更喜欢你的建议。在稍微不同的语法/语境下,它对我很有效:

var dt_to = $.datepicker.formatDate('yy-mm-dd', new Date());

如果你决定使用来自JQuery UI的日期选择器,确保在文档的<head>部分中使用正确的引用:

<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />

<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 

17

我希望这段代码可以解决你的问题。

var d = new Date();

var curr_day = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();

var curr_hour = d.getHours();
var curr_min = d.getMinutes();
var curr_sec = d.getSeconds();

curr_month++ ; // In js, first month is 0, not 1
year_2d = curr_year.toString().substring(2, 4)

$("#txtDate").val(curr_day + " " + curr_month + " " + year_2d)

10
将此函数添加到您的<script></script>中,并从该<script></script>中任何位置调用。
<script>

function GetNow(){
    var currentdate = new Date(); 
    var datetime = currentdate.getDate() + "-"
            + (currentdate.getMonth()+1)  + "-" 
            + currentdate.getFullYear() + " "  
            + currentdate.getHours() + ":"  
            + currentdate.getMinutes() + ":" 
            + currentdate.getSeconds();
    return datetime;
}

window.alert(GetNow());

</script>

或者您可以直接使用提供格式化功能的Jquery:

window.alert(Date.parse(new Date()).toString('yyyy-MM-dd H:i:s'));

我喜欢第二个选项。它一举解决了所有问题。


4
第二个选项给了我“基数参数必须在2到36之间 在Number.toString中”。它崩溃了。 - DevOpsSauce
1
我们不能使用第二个选项,因为它会抛出错误。 - MayankGaur

9
如果您正在使用jQuery UI,则可以按照以下方式使用它,您可以指定自己的日期格式。
$.datepicker.formatDate( "D dd-M-yy", new Date()) // Output "Fri 08-Sep-2017"

8

只需要使用这个:

var date_str=('0'+date.getDate()).substr(-2,2)+' '+('0'+date.getMonth()).substr(-2,2)+' '+('0'+date.getFullYear()).substr(-2,2);

1
请注意,这会给你一个过去一个月的日期(除非在一月份访问它,此时它会为月份提供“00”,因为date.getMonth()是从零开始的索引)。 - jaybrau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接