的时刻.区域设置添加额外的日期



我尝试将moment.locale添加到我的代码:

if(time_to_exe == 6)
{
moment.locale('fr', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_')});
var orderDateTime = moment();
// Get Sunday (first day) of this week and add 3 days (to get to Wednesday) and set the time to 11:59am
var cutOffDate = moment().startOf('week').add(3,'days').set({'hour': 11, 'minute': 59, 'second': 59});
// Initialize delivery date from order date
var deliveryDate = orderDateTime.clone();
if (orderDateTime.isSameOrBefore(cutOffDate)) {
deliveryDate = deliveryDate.add(1,'week').startOf('week').add(1,'day'); // Monday next week
} else {
deliveryDate = deliveryDate.add(2,'week').startOf('week').add(1,'day'); // Monday the week after next
}

if (deliveryDate) {
time_to_exe = deliveryDate.format("D MMMM");

} else {
time_to_exe = time_to_exe + "d";
}
}

一切正常,文本月份以法语显示,但问题是moment.locale添加了额外的一天

示例:在moment.locale之前,我的日期显示为9月6日(英语),但在添加moment.locale之后,它显示为9月7日(法语)

为什么要加一天?

Moment是旧的,它只会给你的bundle增加很多额外的重量。JavaScript可以自己做更多更好的事情


const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012
console.log(event.toLocaleDateString('ar-EG', options));
// expected output: الخميس، ٢٠ ديسمبر، ٢٠١٢
console.log(event.toLocaleDateString(undefined, options));
// expected output: Thursday, December 20, 2012 (varies according to default locale)

在这里了解更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

自行解决,只需删除。add(1,'day')据我所知,在一周以周日开始之前,需要添加1天以获得周一,但更改区域设置周以周一开始,因此不需要添加额外的一天

if(time_to_exe == 6)
{
var orderDateTime = moment();
// Get Sunday (first day) of this week and add 3 days (to get to Wednesday) and set the time to 11:59am
var cutOffDate = moment().startOf('week').add(2,'days').set({'hour': 11, 'minute': 59, 'second': 59});
// Initialize delivery date from order date
var deliveryDate = orderDateTime.clone();
if (orderDateTime.isSameOrBefore(cutOffDate)) {
deliveryDate = deliveryDate.add(1,'week').startOf('week'); // Monday next week
} else {
deliveryDate = deliveryDate.add(2,'week').startOf('week'); // Monday the week after next
}

if (deliveryDate) {
time_to_exe = deliveryDate.format("D. MMMM");

} else {
time_to_exe = time_to_exe + "d";
}
}

最新更新