如何在 javascript 中将一个完整的日期转换为一个短的日期?

2010年1月9日,星期一

我现在要把它转换成

2010年1月9日

我试过了

    var startDate = "Monday, January 9, 2010";
var convertedStartDate = new Date(startDate);
var month = convertedStartDate.getMonth() + 1
var day = convertedStartDate.getDay();
var year = convertedStartDate.getFullYear();
var shortStartDate = month + "/" + day + "/" + year;

然而,它必须考虑到日期的格式不同,因为第一天返回1而不是9。

197328 次浏览

getDay()方法返回一个数字来表示一周中的某一天(0 = Sun,1 = Mon,... 6 = Sat)。使用 getDate()返回月份中某一天的数字:

var day = convertedStartDate.getDate();

如果您愿意,您可以尝试向 Date对象的原型添加一个自定义格式函数:

Date.prototype.formatMMDDYYYY = function(){
return (this.getMonth() + 1) +
"/" +  this.getDate() +
"/" +  this.getFullYear();
}

完成此操作后,可以在 Date对象的 任何实例上调用 formatMMDDYYY()。当然,这只是一个非常具体的示例,如果您真的需要它,您可以编写一个基于格式字符串的通用格式化函数,有点像 Java 的 SimpleDateeFormat (http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html)

(切线: Date对象总是让我困惑... ... getYear()getFullYear()getDate()getDay()getDate()范围从1。.31,但 getMonth()从0。。11

这是一个烂摊子,我总是需要看一眼。 http://www.w3schools.com/jsref/jsref_obj_date.asp)

试试这个:

new Date().toLocaleFormat("%x");

我能做到这一点:

var dateTest = new Date("04/04/2013");
dateTest.toLocaleString().substring(0,dateTest.toLocaleString().indexOf(' '))

04/04/2013只是用来测试的,用你的日期对象代替。

date.toLocaleDateString('en-US')工作得很好。这里有一些关于它的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

给你:

(new Date()).toLocaleDateString('en-US');

就是这样! !

您可以在任何日期对象上使用它

假设. . 你有一个对象叫做“ currentDate”

var currentDate = new Date(); //use your date here
currentDate.toLocaleDateString('en-US'); // "en-US" gives date in US Format - mm/dd/yy

(或)

如果你想要本地格式,然后

currentDate.toLocaleDateString(); // gives date in local Format

你可以很容易地用我的 日期短码软件包做到这一点:

const dateShortcode = require('date-shortcode')


var startDate = 'Monday, January 9, 2010'
dateShortcode.parse('{M/D/YYYY}', startDate)
//=> '1/9/2010'
var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)");
document.getElementById("demo").innerHTML = d.toLocaleDateString();

内置的 toLocaleDateString()做这项工作,但它将删除领先的0s 的一天和一个月,所以我们将得到类似“1/9/1970”,这是不完美的,在我看来。为了得到一个合适的格式 MM/DD/YYYY,我们可以使用这样的东西:

new Date(dateString).toLocaleDateString('en-US', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
})

替代 : 我们可以使用具有良好 浏览器支持Intl.DateTimeFormat得到类似的行为。与 toLocaleDateString()类似,我们可以传递一个带有选项的对象:

const date = new Date('Dec 2, 2021') // Thu Dec 16 2021 15:49:39 GMT-0600
const options = {
day: '2-digit',
month: '2-digit',
year: 'numeric',
}
new Intl.DateTimeFormat('en-US', options).format(date) // '12/02/2021'

我希望在 type = ‘ time’字段中显示日期。

正常的转换会跳过零,表单字段不显示该值,并在控制台中出现一个错误,说明格式需要为 yyyy-mm-dd。

因此我添加了一个小语句(check) ? (true) : (false)如下:

makeShortDate=(date)=>{
yy=date.getFullYear()
mm=date.getMonth()
dd=date.getDate()
shortDate=`${yy}-${(mm<10)?0:''}${mm+1}-${(dd<10)?0:''}${dd}`;
return shortDate;
}

虽然这个问题很久以前就被提出,但是正确的方法是:

Intl.DateTimeFormat("en").format(new Date())

无论如何,Intl (国际)对象有许多选项可以传递给 like 来强制执行两位数等等。 你们都可以在这里查看它