将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

杰里米(Jeremy Holovacs)

是否有JavaScript库或其他某种机制可以让我将.NET日期/时间格式字符串(即yyyy-MM-dd HH:mm:ss)传递给javascript函数,并使其相应地解析提供的datetime值?我已经寻找了一段时间,但似乎找不到我想要的东西。

我想像的用法将使我能够从.NET提供程序提供自定义格式的字符串,并允许我现有的JavaScript库(例如Kendo)一致地呈现日期/时间。

由于我的要求似乎有些混乱,因此我将尝试更加详细:

我有一个User Preferences表,可以让用户选择日期,时间戳和时间等格式,并且可以使用.NET字符串格式完全自定义。从我的.NET应用程序中轻松渲染它们。

但是,我也在使用Kendo,它将从我的服务器收集原始日期/时间数据。我需要让它呈现的数据在javascript库和.NET呈现引擎之间保持一致的格式。

杰里米(Jeremy Holovacs)

因此,简短的答案似乎是,没有一种标准化日期格式的方法,所以...我写了一个。这个小图书馆有几个局限性。例如,我完全忽略了时区(无论如何,我的工作都是UTC),并且我没有检查转义的特殊字符,但是出于我的目的应该这样做:

/************************************************************
Feel free to use this as you like.
************************************************************/
var shortMonths = [
    'Jan',
    'Feb',
    'Mar',
    'Apr',
    'Jun',
    'Jul',
    'Aug',
    'Sep',
    'Oct',
    'Nov',
    'Dec'
];

var fullMonths = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
];

var shortDays = [
    'Sun',
    'Mon',
    'Tue',
    'Wed',
    'Thu',
    'Fri',
    'Sat'
];

var fullDays = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
];

var shortAmPm = [
    'A',
    'P'
];

var fullAmPm = [
    'AM',
    'PM'
];

function dotNetDateTimeFormat(date, format) {
    //we need a date
    if (!(date instanceof Date && !isNaN(date.valueOf()))) return '';

    //if no format is given, send back default yyyy-MM-dd
    format = format || '';
    if (format == '')
        return d.getFullYear + '-' + padZeroes(d.getMonth(), 2) + '-' + padZeroes(d.getDate(), 2);

    //check for standard formats
    switch (format) {
        case 'd': //short date pattern
            return formatDateString(date, 'M/d/yyyy');
        case 'D': //long date pattern
            return formatDateString(date, 'dddd, MMMM d, yyyy');
        case 'f': //Full date/time pattern (short time)
            return formatDateString(date, 'dddd, MMMM d, yyyy h:mm tt');
        case 'F': //Full date/time pattern (long time)
            return formatDateString(date, 'dddd, MMMM d, yyyy h:mm:ss tt');
        case 'g': //General date/time pattern (short time)
            return formatDateString(date, 'M/d/yyyy h:mm tt');
        case 'G': //General date/time pattern (long time)
            return formatDateString(date, 'M/d/yyyy h:mm:ss tt');
        case 'M': //Month/day pattern
        case 'm': //Month/day pattern
            return formatDateString(date, 'MMMM d');
        case 'O': //Round-trip date/time pattern
        case 'o': //Round-trip date/time pattern
            return formatDateString(date, 'yyyy-MM-ddTHH:mm:ss.fff-00:00');
        case 'R': //RFC1123 pattern
        case 'r': //RFC1123 pattern
            return formatDateString(date, 'ddd, d MMM yyyy HH:mm:ss GMT');
        case 's': //Sortable date/time pattern
            return formatDateString(date, 'yyyy-MM-ddTHH:mm:ss');
        case 't': //Short time pattern
            return formatDateString(date, 'h:mm tt');
        case 'T': //Long time pattern
            return formatDateString(date, 'h:mm:ss tt');
        case 'u': //Universal sortable date/time pattern
            return formatDateString(date, 'yyyy-MM-dd HH:mm:ssZ');
        case 'U': //Universal full date/time pattern
            return formatDateString(date, 'dddd, MMMM d, yyyy h:mm:ss tt');
        case 'Y': //Year month pattern
        case 'y': //Year month pattern
            return formatDateString(date, 'MMMM, yyyy');
        default: // custom string, no standard format.
            return formatDateString(date, format);
    }
}

function formatDateString(date, format) {
    var yyyy = date.getFullYear();
    var M = date.getMonth();
    var d = date.getDate();
    var day = date.getDay();
    var H = date.getHours();
    var h = H;
    var pm = h > 12;
    if (pm) h = H - 12;
    var m = date.getMinutes();
    var s = date.getSeconds();
    var f = date.getMilliseconds();

    format = format
        .replace(/GMT/g, '*00*')
        .replace(/yyyy/g, '*01*')
        .replace(/yyy/g, '*02*')
        .replace(/yy/g, '*03*')
        .replace(/y/g, '*04*')
        .replace(/MMMM/g, '*05*')
        .replace(/MMM/g, '*06*')
        .replace(/MM/g, '*07*')
        .replace(/M/g, '*08*')
        .replace(/dddd/g, '*09*')
        .replace(/ddd/g, '*10*')
        .replace(/dd/g, '*11*')
        .replace(/d/g, '*12*')
        .replace(/HH/g, '*13*')
        .replace(/H/g, '*14*')
        .replace(/hh/g, '*15*')
        .replace(/h/g, '*16*')
        .replace(/mm/g, '*17*')
        .replace(/m/g, '*18*')
        .replace(/ss/g, '*19*')
        .replace(/s/g, '*20*')
        .replace(/fff/g, '*21*')
        .replace(/ff/g, '*22*')
        .replace(/f/g, '*23*')
        .replace(/FFF/g, '*24*')
        .replace(/FF/g, '*25*')
        .replace(/F/g, '*26*')
        .replace(/tt/g, pm ? 'PM' : 'AM')
        .replace(/t/g, pm ? 'P' : 'A')
        .replace('*00*', 'GMT')
        .replace('*01*', yyyy)
        .replace('*02*', yyyy.toString().substr(-3, 3))
        .replace('*03*', yyyy.toString().substr(-2, 2))
        .replace('*04*', yyyy.toString().substr(-1, 1))
        .replace('*05*', getFullMonth(M.toString()))
        .replace('*06*', getShortMonth(M.toString()))
        .replace('*07*', padZeroes(M.toString(), 2))
        .replace('*08*', M.toString())
        .replace('*09*', getFullDay(day.toString()))
        .replace('*10*', getShortDay(day.toString()))
        .replace('*11*', padZeroes(d.toString(), 2))
        .replace('*12*', d.toString())
        .replace('*13*', padZeroes(H.toString(), 2))
        .replace('*14*', H.toString())
        .replace('*15*', padZeroes(h.toString(), 2))
        .replace('*16*', h.toString())
        .replace('*17*', padZeroes(m.toString(), 2))
        .replace('*18*', m.toString())
        .replace('*19*', padZeroes(s.toString(), 2))
        .replace('*20*', s)
        .replace('*21*', padZeroes(f.toString(), 3))
        .replace('*22*', padZeroes(Math.round(f / 10), 2).toString())
        .replace('*23*', Math.round(f / 100).toString())
        .replace('*24*', blankZero(padZeroes(f.toString(), 3)))
        .replace('*25*', blankZero(padZeroes(Math.round(f / 10), 2).toString()))
        .replace('*26*', blankZero(Math.round(f / 100).toString()))
    ;

    return format;
}

function getShortMonth(month) {
    return shortMonths[month];
}

function getFullMonth(month) {
    return fullMonths[month];
}

function getShortDay(day) {
    return shortDays[day];
}

function getFullDay(day) {
    return fullDays[day];
}

function padZeroes(toPad, numDigits) {
    toPad = toPad || '';
    var zeroes = Array(numDigits).join('0');
    return (zeroes + toPad).substr(-numDigits, numDigits);
}

function blankZero(number) {
    var n = parseFloat(number);
    if (isNaN(number)) return '';
    if (n == 0.0) return '';
    return n;
}

您可以这样使用它:

<div id="test-format"></div>

<script type="text/javascript">
    var date = new Date(2009, 6, 15, 13, 45, 30, 660);
    var formats = [
        dotNetDateTimeFormat(date, 'd'),
        dotNetDateTimeFormat(date, 'D'),
        dotNetDateTimeFormat(date, 'f'),
        dotNetDateTimeFormat(date, 'F'),
        dotNetDateTimeFormat(date, 'g'),
        dotNetDateTimeFormat(date, 'G'),
        dotNetDateTimeFormat(date, 'm'),
        dotNetDateTimeFormat(date, 'M'),
        dotNetDateTimeFormat(date, 'o'),
        dotNetDateTimeFormat(date, 'O'),
        dotNetDateTimeFormat(date, 'r'),
        dotNetDateTimeFormat(date, 'R'),
        dotNetDateTimeFormat(date, 's'),
        dotNetDateTimeFormat(date, 't'),
        dotNetDateTimeFormat(date, 'T'),
        dotNetDateTimeFormat(date, 'u'),
        dotNetDateTimeFormat(date, 'U'),
        dotNetDateTimeFormat(date, 'y'),
        dotNetDateTimeFormat(date, 'Y'),
        dotNetDateTimeFormat(date, 'yyyyMMddHHmmss')
    ];

    $(function () {
        var f = formats.join('<br />');
        $('#test-format').html(f);
    });

</script>

欢迎改进。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

来自分类Dev

将GMT格式的字符串转换为日期时间

来自分类Dev

将字符串转换为不同的日期时间格式

来自分类Dev

使用Javascript将字符串(日期格式)转换为日期时间

来自分类Dev

将字符串中的日期时间格式转换为日期javascript?

来自分类Dev

将字符串转换为asp .net中的日期时间格式

来自分类Dev

Presto-Sql:将字符串格式的时间转换为日期格式

来自分类Dev

如何将多个日期格式的字符串转换为时区格式的时间戳

来自分类Dev

将日期时间转换为格式化的时间字符串

来自分类Dev

将日期时间转换为格式化的时间字符串

来自分类Dev

将日期和时间字符串转换为特定格式的日期

来自分类Dev

将字符串转换为日期和时间,格式为am / pm

来自分类Dev

将格式为yyyymmddhhnn的字符串转换为日期时间

来自分类Dev

python将日期时间格式的字符串转换为秒

来自分类Dev

将MySQL日期时间字符串转换为time.Time格式

来自分类Dev

将日期时间格式从Web服务转换为字符串

来自分类Dev

将字符串转换为24小时日期时间格式

来自分类Dev

使用dd / mm / yyyy格式将日期时间转换为字符串时出错

来自分类Dev

如何将API提供的日期/时间字符串转换为可读格式?

来自分类Dev

Android如何将字符串转换为日期时间格式?

来自分类Dev

将CSV列格式从字符串转换为日期时间

来自分类Dev

如何将日期时间字符串转换为另一种格式

来自分类Dev

将文本字符串转换为日期/时间格式

来自分类Dev

将日期时间格式从Web服务转换为字符串

来自分类Dev

将字符串转换为日期时间完全相同的格式

来自分类Dev

PHP 将 UTC 中的字符串日期时间转换为 GMT+7 格式

来自分类Dev

将时间字符串转换为Excel时间格式

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

将日期字符串转换为JSON日期格式

Related 相关文章

  1. 1

    将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

  2. 2

    将GMT格式的字符串转换为日期时间

  3. 3

    将字符串转换为不同的日期时间格式

  4. 4

    使用Javascript将字符串(日期格式)转换为日期时间

  5. 5

    将字符串中的日期时间格式转换为日期javascript?

  6. 6

    将字符串转换为asp .net中的日期时间格式

  7. 7

    Presto-Sql:将字符串格式的时间转换为日期格式

  8. 8

    如何将多个日期格式的字符串转换为时区格式的时间戳

  9. 9

    将日期时间转换为格式化的时间字符串

  10. 10

    将日期时间转换为格式化的时间字符串

  11. 11

    将日期和时间字符串转换为特定格式的日期

  12. 12

    将字符串转换为日期和时间,格式为am / pm

  13. 13

    将格式为yyyymmddhhnn的字符串转换为日期时间

  14. 14

    python将日期时间格式的字符串转换为秒

  15. 15

    将MySQL日期时间字符串转换为time.Time格式

  16. 16

    将日期时间格式从Web服务转换为字符串

  17. 17

    将字符串转换为24小时日期时间格式

  18. 18

    使用dd / mm / yyyy格式将日期时间转换为字符串时出错

  19. 19

    如何将API提供的日期/时间字符串转换为可读格式?

  20. 20

    Android如何将字符串转换为日期时间格式?

  21. 21

    将CSV列格式从字符串转换为日期时间

  22. 22

    如何将日期时间字符串转换为另一种格式

  23. 23

    将文本字符串转换为日期/时间格式

  24. 24

    将日期时间格式从Web服务转换为字符串

  25. 25

    将字符串转换为日期时间完全相同的格式

  26. 26

    PHP 将 UTC 中的字符串日期时间转换为 GMT+7 格式

  27. 27

    将时间字符串转换为Excel时间格式

  28. 28

    将日期字符串转换为JSON日期格式

  29. 29

    将日期字符串转换为JSON日期格式

热门标签

归档