如何在JavaScript中获取当前日期?
当前回答
这是我目前最喜欢的,因为它既灵活又模块化。它是(至少)三个简单函数的集合:
/**
* Returns an array with date / time information
* Starts with year at index 0 up to index 6 for milliseconds
*
* @param {Date} date date object. If falsy, will take current time.
* @returns {[]}
*/
getDateArray = function(date) {
date = date || new Date();
return [
date.getFullYear(),
exports.pad(date.getMonth()+1, 2),
exports.pad(date.getDate(), 2),
exports.pad(date.getHours(), 2),
exports.pad(date.getMinutes(), 2),
exports.pad(date.getSeconds(), 2),
exports.pad(date.getMilliseconds(), 2)
];
};
下面是pad函数:
/**
* Pad a number with n digits
*
* @param {number} number number to pad
* @param {number} digits number of total digits
* @returns {string}
*/
exports.pad = function pad(number, digits) {
return new Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
};
最后,我可以手动创建日期字符串,也可以使用一个简单的函数来实现:
/**
* Returns nicely formatted date-time
* @example 2015-02-10 16:01:12
*
* @param {object} date
* @returns {string}
*/
exports.niceDate = function(date) {
var d = exports.getDateArray(date);
return d[0] + '-' + d[1] + '-' + d[2] + ' ' + d[3] + ':' + d[4] + ':' + d[5];
};
/**
* Returns a formatted date-time, optimized for machines
* @example 2015-02-10_16-00-08
*
* @param {object} date
* @returns {string}
*/
exports.roboDate = function(date) {
var d = exports.getDateArray(date);
return d[0] + '-' + d[1] + '-' + d[2] + '_' + d[3] + '-' + d[4] + '-' + d[5];
};
其他回答
基础知识
如果您对2016年1月24日星期日21:23:07 GMT+0100(CET)格式感到满意,您可以使用以下代码:
var today = new Date();
Date.product.toLocaleDateString()
如果要格式化输出,请考虑使用Date.protype.toLocaleDateString():
var today = new Date().toLocaleDateString('de-DE', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
});
如果您今天(1月24日)执行了该代码ᵗʰ,2016),它将产生字符串Sonntag,24。2016年1月。但是,较旧的浏览器可能会产生不同的结果,例如IE<11不支持区域设置或选项参数。
正在自定义
如果Date.product.toLocaleDateString()不够灵活,无法满足您可能需要的任何需求,您可能需要考虑创建一个自定义Date对象,如下所示:
var DateObject = (function() {
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var date = function(str) {
this.set(str);
};
date.prototype = {
set : function(str) {
var dateDef = str ? new Date(str) : new Date();
this.day = dateDef.getDate();
this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
this.month = dateDef.getMonth() + 1;
this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
this.monthName = monthNames[this.month - 1];
this.year = dateDef.getFullYear();
}
};
return date;
})();
如果您今天(1月24日)包含了该代码并执行了新的DateObject()ᵗʰ,2016),它将生成具有以下财产的对象:
day: 24
dayPadded: "24"
month: 1
monthPadded: "01"
monthName: "January"
year: 2016
这个答案适用于那些想要一个类似ISO-8601-格式和时区的日期的人。
对于那些不想包含任何日期库的人来说,这是纯JavaScript。
var date = new Date();
var timeZone = date.toString();
// Get timezone ('GMT+0200')
var timeZoneIndex = timeZone.indexOf('GMT');
// Cut optional string after timezone ('(heure de Paris)')
var optionalTimeZoneIndex = timeZone.indexOf('(');
if(optionalTimeZoneIndex != -1){
timeZone = timeZone.substring(timeZoneIndex, optionalTimeZoneIndex);
}
else{
timeZone = timeZone.substring(timeZoneIndex);
}
// Get date with JSON format ('2019-01-23T16:28:27.000Z')
var formattedDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
// Cut ms
formattedDate = formattedDate.substring(0,formattedDate.indexOf('.'));
// Add timezone
formattedDate = formattedDate + ' ' + timeZone;
console.log(formattedDate);
在控制台中打印以下内容:
2019-01-23 17:12:52 GMT+0100
JSFiddle:https://jsfiddle.net/n9mszhjc/4/
那么多复杂的答案。。。
只需使用new Date(),如果需要它作为字符串,只需使用newDate().toISOString()
享受
您可能希望自动检索浏览器的区域设置名称,并将其作为toLocaleString()的第一个参数传递,以便传递其他选项:
//获取区域设置名称函数getLang(){if(navigator.languages!=未定义)返回navigator.languages[0];返回navigator.language;}//获取格式为yyyy-MM-ddThmmss的当前日期时间const time=new Date().toLocaleString(getLang(){小时12:假,年份:'数字',月份:'2-位',天:'2位数',小时:“数字”,minute:“数字”,第二个:“数字”}).replaceAll(“/”,“-”).replaceAll(“:”,“”).replace All(“”,“T”)console.log(“locale:”,getLang())console.log(时间)
结果可能如下:
locale: zh-TW
2022-09-13T171642
当您更改浏览器的区域设置时,时间和日期(如果需要)也会更改。
TL;博士
只有当您需要本地计算机(客户端)上的当前时间时,这里找到的大多数答案才是正确的,而本地计算机(客户机)是一个通常不可靠的源(它可能与其他系统不同)。
可靠的来源包括:
Web服务器的时钟(但确保已更新)时间API和CDN
细节
在Date实例上调用的方法将返回一个基于计算机本地时间的值。
更多详细信息可以在“MDN web docs”:JavaScript Date对象中找到。
为了方便您,我从他们的文档中添加了一条相关注释:
(…)获取日期和时间或其组件的基本方法都在本地(即主机系统)时区和偏移中工作。
提到这一点的另一个来源是:JavaScript日期和时间对象
需要注意的是,如果某人的时钟关闭了几个小时,或者他们在不同的时区,则Date对象将创建与您自己计算机上创建的时间不同的时间。
您可以使用的一些可靠来源是:
web服务器的时钟(首先检查是否正确设置)时间API和CDN:https://timezonedb.com/apihttp://worldtimeapi.orghttp://worldclockapi.comhttp://www.geonames.org/export/ws-overview.html其他相关API:https://www.programmableweb.com/category/time/api
但是,如果准确度对您的用例并不重要,或者如果您只需要日期与本地机器的时间相关,那么您可以安全地使用Javascript的date基本方法,如date.now()。