在JavaScript中获取当前日期和时间

662

我有一个 JavaScript 脚本,可以打印当前的日期和时间,但是DATE总是错误的。以下是代码:

var currentdate = new Date();
var datetime = "Last Sync: " + currentdate.getDay() + "/" + currentdate.getMonth() 
+ "/" + currentdate.getFullYear() + " @ " 
+ currentdate.getHours() + ":" 
+ currentdate.getMinutes() + ":" + currentdate.getSeconds();

它应该打印18/04/2012 15:07:33,但实际输出3/3/2012 15:07:33


15
通常,您应该努力阅读正在使用的API的文档。这里是一些有关JavaScript日期对象的文档:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date。您需要了解的所有内容都可以在那里找到,以解决您的问题。 - Steven Oxley
3
可能是如何在JavaScript中获取当前日期的重复问题。 - Jon
我认为JavaScript将从系统获取当前日期和时间。因此,请在计算机上设置当前日期和时间。 - Billy
这是2012年第3个月(从0开始计数),星期三(从星期日开始,也是从0开始计数)。 - SparK
13
人们经常抱怨某些问题,但是在SO上几乎没有问题是不能通过阅读文档来回答的。我喜欢这个网站,因为它提供了简洁的答案以及如何完成我正在尝试做的事情的示例,就像这个问题所做的那样。 - Chris Sharp
19
当人们在谷歌搜索时,他们会来到这里而不是API文档,分享知识而不让人感到难过,这样真的很糟糕吗? - Mauricio Gracia Gutierrez
35个回答

763

.getMonth() 返回的是从0开始计数的数字,因此为了获得正确的月份,需要加1。例如,在五月调用.getMonth()会返回4而不是5

因此,在你的代码中,我们可以使用currentdate.getMonth()+1来输出正确的值。此外:

  • .getDate() 返回月份中的某一天<- 这才是你想要的
  • .getDay()Date对象的另一个方法,它将返回表示当前星期几的整数(0-6),其中0 == 星期日等等

因此,你的代码应该像这样:

var currentdate = new Date(); 
var datetime = "Last Sync: " + currentdate.getDate() + "/"
                + (currentdate.getMonth()+1)  + "/" 
                + currentdate.getFullYear() + " @ "  
                + currentdate.getHours() + ":"  
                + currentdate.getMinutes() + ":" 
                + currentdate.getSeconds();
JavaScript的Date实例继承自Date.prototype。您可以修改构造函数的prototype对象以影响JavaScript Date实例继承的属性和方法。
您可以利用Date原型对象创建一个新方法,该方法将返回今天的日期和时间。这些新方法或属性将被所有Date对象的实例继承,因此如果需要重复使用此功能,则特别有用。
// For todays date;
Date.prototype.today = function () { 
    return ((this.getDate() < 10)?"0":"") + this.getDate() +"/"+(((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ this.getFullYear();
}

// For the time now
Date.prototype.timeNow = function () {
     return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
}
你可以通过以下方式简单地检索日期和时间:
var newDate = new Date();
var datetime = "LastSync: " + newDate.today() + " @ " + newDate.timeNow();

或者内联调用该方法,这样它将会变成 -

var datetime = "LastSync: " + new Date().today() + " @ " + new Date().timeNow();

15
12小时制和AM/PM的小改动:Date.prototype.timeNow = function(){ return ((this.getHours() < 10)?"0":"") + ((this.getHours()>12)?(this.getHours()-12):this.getHours()) +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds() + ((this.getHours()>12)?('下午'):'上午'); }; - Robert Speer
2
@RobertSpeer 不错的建议。自从上次更新这篇文章以来,我已经编写了一个更易用的日期对象方法,我称之为 now(),它接受一个布尔值参数来确定是仅返回日期还是日期和时间,还有第二个参数指定应该返回日期的格式,例如 dd/mm/yyyy 等。 - Mark Walters
1
请注意,像00:04:02这样的时间在第一个建议中会被呈现为0:4:2,这不是要求的。为了解决这个问题,可以添加第二个建议中的三元运算符:(date.getHours() < 10 ? "0" : "") + date.getHours() + ":" + (date.getMinutes() < 10 ? "0" : "") + date.getMinutes() + ":" + (date.getSeconds() < 10 ? "0" : "") + date.getSeconds(); - Matthias
1
也许有点琐碎,但是时间戳应该存储在临时对象中,以避免在检索/打印方法期间更改当前日期/时间。 - SaW
1
更新:('0' + this.getDate()).slice(-2) 似乎比 (this.getDate() < 10)?"0":"") + this.getDate() 更短。 - Tân
显示剩余3条评论

501

要获取时间和日期,您应该使用

    new Date().toLocaleString();

>> "09/08/2014, 2:35:56 AM"

要仅获取日期,您应该使用

    new Date().toLocaleDateString();

>> "09/08/2014"

要仅获取时间,您应该使用

    new Date().toLocaleTimeString();

>> "2:35:56 AM"

如果您只想获取美式英语格式下不带上午/下午标记的时间,格式为hh:mm

    new Date().toLocaleTimeString('en-US', { hour12: false, 
                                             hour: "numeric", 
                                             minute: "numeric"});
>> "02:35"

或者英式英语

    new Date().toLocaleTimeString('en-GB', { hour: "numeric", 
                                             minute: "numeric"});

>> "02:35"

点击这里了解更多。


3
这在大多数浏览器中都有效,但你可以在 此处 检查兼容性。 - Quethzel Díaz
1
很遗憾,你不能轻易地使用这个来获取微秒/毫秒。 - wordsforthewise
1
加一。我在寻找一种方法来保留两个数字。之前我使用的是 getHours()getMinutes(),但这样你得不到格式,只有 1 而不是 01。 - John

89

要获得真正的 MySQL 风格输出,请使用以下函数:2019/02/28 15:33:12

  • 如果您点击下面的“运行代码段”按钮
  • 它将向您展示一个简单的实时数字时钟示例
  • 演示将出现在代码段下方。

function getDateTime() {
        var now     = new Date(); 
        var year    = now.getFullYear();
        var month   = now.getMonth()+1; 
        var day     = now.getDate();
        var hour    = now.getHours();
        var minute  = now.getMinutes();
        var second  = now.getSeconds(); 
        if(month.toString().length == 1) {
             month = '0'+month;
        }
        if(day.toString().length == 1) {
             day = '0'+day;
        }   
        if(hour.toString().length == 1) {
             hour = '0'+hour;
        }
        if(minute.toString().length == 1) {
             minute = '0'+minute;
        }
        if(second.toString().length == 1) {
             second = '0'+second;
        }   
        var dateTime = year+'/'+month+'/'+day+' '+hour+':'+minute+':'+second;   
         return dateTime;
    }

    // example usage: realtime clock
    setInterval(function(){
        currentTime = getDateTime();
        document.getElementById("digital-clock").innerHTML = currentTime;
    }, 1000);
<div id="digital-clock"></div>


我见过的最干净的答案。 :) - Shurvir Mori

36

只需要使用:

var d = new Date();
document.write(d.toLocaleString());
document.write("<br>");

3
还有类似的函数:toUTCString()。请参考 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString,该页面的侧边栏中列出了类似的函数列表。 - Steve

32

简短

我改进了Steve的回答,以获得OP所需的精确结果。

new Date().toLocaleString().replace(',','')

console.log(new Date().toLocaleString().replace(',',''));


17
var currentdate = new Date();

    var datetime = "Last Sync: " + currentdate.getDate() + "/"+(currentdate.getMonth()+1) 
    + "/" + currentdate.getFullYear() + " @ " 
    + currentdate.getHours() + ":" 
    + currentdate.getMinutes() + ":" + currentdate.getSeconds();

.getDay() 方法更改为 .GetDate(),并且在月份上加1,因为它从0开始计算月份。


9
这应该可以解决问题:
function dateToString(date) {
    var month = date.getMonth() + 1;
    var day = date.getDate();
    var dateOfString = (("" + day).length < 2 ? "0" : "") + day + "/";
    dateOfString += (("" + month).length < 2 ? "0" : "") + month + "/";
    dateOfString += date.getFullYear();
    return dateOfString;
}

var currentdate = new Date();
var datetime = "Last Sync: ";
datetime += dateToString(currentdate );
datetime += + currentdate.getHours() + ":"
            + currentdate.getMinutes() + ":"
            + currentdate.getSeconds();

分钟和秒应该扩展为2位数字,就像天数和月份一样。 - pholpar

8

基础JS(很好学):我们使用Date()函数并进行所需的操作以显示日期和星期几,以符合我们的自定义格式。

var myDate = new Date();

let daysList = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
let monthsList = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Aug', 'Oct', 'Nov', 'Dec'];


let date = myDate.getDate();
let month = monthsList[myDate.getMonth()];
let year = myDate.getFullYear();
let day = daysList[myDate.getDay()];

let today = `${date} ${month} ${year}, ${day}`;

let amOrPm;
let twelveHours = function (){
    if(myDate.getHours() > 12)
    {
        amOrPm = 'PM';
        let twentyFourHourTime = myDate.getHours();
        let conversion = twentyFourHourTime - 12;
        return `${conversion}`

    }else {
        amOrPm = 'AM';
        return `${myDate.getHours()}`}
};
let hours = twelveHours();
let minutes = myDate.getMinutes();

let currentTime = `${hours}:${minutes} ${amOrPm}`;

console.log(today + ' ' + currentTime);


Node JS(快速且简单):使用npm包安装(npm install date-and-time),然后运行以下命令。

let nodeDate = require('date-and-time');
let now = nodeDate.format(new Date(), 'DD-MMMM-YYYY, hh:mm:ss a');
console.log(now);

8

简短明了:

console.log(new Date().toLocaleString());

参考文献


这已经在其他答案中提到过了,例如这个 - Eric Aya

6

我从这里找到了获取JavaScript中当前日期和时间的最简单方法 - 如何使用JavaScript获取当前日期和时间

var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var CurrentDateTime = date+' '+time;

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