Javascript moment.calendar()不带时间

Javascript moment.calendar()不带时间,javascript,python,momentjs,Javascript,Python,Momentjs,我想使用moment.calendar()选项而不使用时间。。。所以不是 “上周二下午5点”我想要“上周二”。 有人知道现在“时刻”是否有解决办法吗? 我发现了这把小提琴,它显然显示了一个解决方案,但我看不出这是如何工作的? 谢谢 卡尔 函数日志(str){ $('body')。追加(''+str+''); } 日志(矩().calendar()); 日志(矩().日历(真)); 矩().calendar()支持自定义格式化字符串和格式化函数 moment().calendar(); >&

我想使用moment.calendar()选项而不使用时间。。。所以不是 “上周二下午5点”我想要“上周二”。 有人知道现在“时刻”是否有解决办法吗? 我发现了这把小提琴,它显然显示了一个解决方案,但我看不出这是如何工作的? 谢谢 卡尔

函数日志(str){
$('body')。追加(''+str+'

'); } 日志(矩().calendar()); 日志(矩().日历(真));
矩().calendar()
支持自定义格式化字符串和格式化函数

moment().calendar();
>> "Today at 9:06 AM"
然后设置格式化字符串

moment.locale('yourlang', {
    calendar: {
        lastDay: function () {
            return '[last]';
        },
        sameDay: function () {
            return '[Today]';
        }
    }
});

moment().calendar();

// Will now output
>> "Today"

我们应该做到这一点。我创建了一个angular指令,它只提供日期日历。 如果不使用角度,只需使用函数

 app.filter('amCalendarDate', function($translate) {
    return function(dt) {
        var md = moment(dt), key = '';

        if (!dt || !md || (md + '').toLowerCase() == 'invalid date')
            return '';

        var today = moment();
        var diff = today.diff(md, 'days');

        if (!diff)
            key = 'Today';
        else if (diff == -1)
            key = 'Tomorrow';
        else if (diff == 1)
            key = 'Yesterday';
        else if (Math.abs(diff) <= 6) {
            if (diff < 0)
                key = 'Next';
            else
                key = 'Last';

            var days = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');

            today.day(diff);

            key += ' ' + days[today.day()];
        }

        if (key) {
            // if you don't have translate, just return the key
            return $translate.amCalendarDate[key];
        } else
            return md.format('L');
    }
});
app.filter('amCalendarDate',函数($translate){
返回函数(dt){
var md=力矩(dt),键=“”;
如果(!dt | | |!md | |(md+“”).toLowerCase()=='无效日期')
返回“”;
var today=时刻();
var diff=今天的.diff(md,“天”);
if(!diff)
键=‘今天’;
否则如果(差异==-1)
键=‘明天’;
否则如果(差异==1)
键='昨天';

否则,如果从第2.10.5节开始(数学abs(diff),您可以:

moment(/*your date*/).calendar(null,{
    lastDay : '[Yesterday]',
    sameDay : '[Today]',
    nextDay : '[Tomorrow]',
    lastWeek : '[last] dddd',
    nextWeek : 'dddd',
    sameElse : 'L'
})

请参阅:

这非常有效。试试看


(矩(time).calendar().split(“at”))[0]

如果您没有设置自定义时间并且只在一天的基础上工作,您可以使用这个简单的多语言(针对EN/DE/FR/IT进行测试)解决方案。(整天总是用00:00时间标记保存)


此代码部分起作用。问题在于将单词at[今天at]分开

在下面的示例中,a las(英语中的意思是at)是结果的一部分

moment().locale()
// "es"

moment().calendar(null, {
    sameDay: function (now) {
        var sameDay = now._locale._calendar.sameDay

        if (typeof sameDay === 'function') {
            sameDay = sameDay.call(this)
        }

        return sameDay.replace(' LT', '')
    }
})
// "hoy a las"

如果翻译为“[Today][at]LL”,我们将能够在

处分离单词,我有相同的要求,不幸的是,目前不支持此要求(版本2.24.0)

如果查看任意语言文件,如,可以看到所有日历变量都包含时间。

没有省去时间的选项。这将需要一种不同的日历,没有每种语言的时间。

因为矩
2.25.0
现在可以调用矩。日历(格式),而不需要参考时间值


假设
moment.js
地区不会改变,我为我使用的以下语言编写了一个关于
moment().calendar()
的简单包装函数:

en、ar、bg、cs、da、de、el、es、et、fi、fr-ca、fr、he、hr、hu、hy-am、it、ja、kk、ko、lt、nl、nb、pl、pt、ro、ru、sk、sl、sr、sv、th、tr、uk、vi、zh-cn、zh-tw

您可以根据自己的需要在switch语句中添加新的或删除现有的案例,它仍然可以正常工作

const timeRegExp=/[0-9:,]/g;
常量dateRegExp=/[0-9.-/]/g;
常量removeLastNWords=(str,n,分隔符)=>{
返回“${str.split(“”).splice(0,n).join(separator)}”;
}
const removeDigitsAndTimeChars=(str)=>{
返回“${str.replace(timeRegExp)”).trimEnd()}”;
}
const removeLastNWordsStripped=(str,n,分隔符)=>{
返回removeDigitsAndTimeChars(removeLastNWords(str,n,分隔符));
}
const calendarNoTime=(inp,strict)=>{
const originalCalendarDate=时刻(inp,strict).calendar();
常量部分=原始CalendarDate.split(“”);
/**
*大多数语言对日历使用“L”格式:{sameElse},
*这些部分的长度为1。zh cn不使用空格分隔
*从日期开始的时间,因此如果存在,请将其删除,否则保留
*“L”格式。如果不需要“cn”,只需返回部分[0]。
*`sr/sl`使用空格分隔日、月、年。
* 
*/
if(parts.length==1 | | dateRegExp.test(parts[0])){
返回部分[0]。包括(“:”)?移除的数字和时间字符(部分[0]):部分。联接(“”);
}
开关(moment.locale()){
/**
*这些语言有一个长度小于3的介词
*在时间之前。找到那个介词并保留单词
*直到那个介词如果不需要“ru”,
*使用removeLastNWords(原始CalendarDate、介词索引“”)
* 
*/
案例“bg”:
案例“cs”:
案例“de”:
案例“es”:
案例“en”:
案例“fr”:
案例“fr ca”:
案例“hr”:
案例“nl”:
案例“pl”:
案例“pt”:
案例“ro”:
案例“ru”:
案例“sk”:
案例“sl”:
案例“sr”:
“英国”案例:
常量介词索引=parts.findIndex((part,i)=>i!==0&&part.length<3);
返回removeLastNWordsStripped(原始日历日期,前置索引“”);
/**
*这些语言对介词的要求没有上述严格,它们把介词放在
*在“parts”数组中的最后一个索引旁边,指向每个单词。
* 
*/
案例“da”:
案例“fi”:
案例“it”:
案例“kk”:
案件‘nb’:
案例“th”:
案例‘vi’:
返回removeLastNWords(originalCalendarDate,parts.length-2');
//使用[dddd,XX:XX]格式,删除数字和特殊字符
案例“et”:
案例“ja”:
案件‘ko’:
案例“lt”:
案例“sv”:
案例“zh tw”:
案例“zh cn”:
返回移除的数字和时间字符(原始日历日期);
//和上面一样,除了介词的部分。长度-3
案例“el”:
返回removeLastNWords(originalCalendarDate,parts.length-3');
//与上面相同+[dddd LT]格式持续几天
案例“hy am”:
返回parts.length<3?parts[0]:删除最新单词(originalCalendarDate,parts.length-3');
//和上面一样,介词的长度为-2
案例‘tr’:
返回parts.length<3?parts[0]:删除最新单词(originalCalendarDate,parts.length-2');
//在time后面追加'kor',删除包含此子字符串的单词
“胡”案:
回归原点
let dateParts = moment(DATE).calendar().split(' '),
    index = dateParts.indexOf('00:00');

// ['Yesterday', 'at', '00:00', 'PM'] -> ['Yesterday']
dateParts.length = (index !== -1 ? (index - 1) : dateParts.length);
moment().locale()
// "es"

moment().calendar(null, {
    sameDay: function (now) {
        var sameDay = now._locale._calendar.sameDay

        if (typeof sameDay === 'function') {
            sameDay = sameDay.call(this)
        }

        return sameDay.replace(' LT', '')
    }
})
// "hoy a las"
const removeLastNWords = (str: string, n: number, separator: string): string => {}
const removeDigitsAndDateChars = (str: string): string => {}
const removeLastNWordsStripped = (str: string, n: number, separator: string): string => {}
const calendarNoTime = (inp?: moment.MomentInput, strict?: boolean): string => {}