【问题标题】:bootstrap-datepicker: How to use specific time zone?bootstrap-datepicker:如何使用特定时区?
【发布时间】:2015-11-25 13:41:11
【问题描述】:

我创建了一个小程序,使用bootstrap-datepicker 选择日期并将其写入 MySQL。

问题是这个日期必须是 Europe/Berlin 的本地日期,无论用户目前在哪里。

$(....).datepicker({ startDate: 'today' });

我的问题是:如何在不使用服务器端代码 (PHP) 或任何其他库的情况下将startDate 设置为本地特定时区

我尝试使用moment + moment-timezone,但它也显示本地浏览器日期。

var todaysDate = moment().tz('Europe/Berlin').format();
$(...).datepicker({ startDate: todaysDate });

谢谢。

【问题讨论】:

    标签: javascript jquery momentjs bootstrap-datepicker


    【解决方案1】:

    刚需

    moment.tz.setDefault("Europe/Berlin");

    在那一刻之后生成正确的日期而不使用tz()。还要确保格式匹配。

    var todaysDate = moment().format('D MMM YYYY');
    $(...).datepicker({ format: 'dd M yyyy', startDate: todaysDate });
    

    【讨论】:

    • 我收到以下错误。 未捕获的类型错误:无法识别选项 startDate!
    【解决方案2】:

    日期对象将始终处于本地时区(基于浏览器)。

    dateObj.getTime() 将为您提供绝对毫秒数。

    http://momentjs.com/ 是一个很棒的时区转换库。

    编辑

    关于如何:

     var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
     var losAngeles = newYork.clone().tz("America/Los_Angeles");
     var london     = newYork.clone().tz("Europe/London");
    
     newYork.format();    // 2014-06-01T12:00:00-04:00
     losAngeles.format(); // 2014-06-01T09:00:00-07:00
     london.format();     // 2014-06-01T17:00:00+01:00
    

    默认情况下,moment 解析并显示为当地时间。

    这是他们网站上的确切代码。如果您不通过America/New_York 而只是简单地通过moment("2014-06-01 12:00"),它将获得当地时间。

    moment().utcOffset() 如果您想知道解释哪个时区时刻,函数将为您提供 utcOffset。

    查看jsFiddle中的演示

    【讨论】:

    • 我尝试使用 moment + moment-timezone 但它也显示本地浏览器日期。
    【解决方案3】:

    也许this 之类的东西可以让你朝着正确的方向前进?

    HTML

    <div class='input-group date date-time-picker'>
        <input type='text' class="form-control" placeholder="Start Time"/>
        <span class="input-group-addon">
            <i class="glyphicon glyphicon-calendar"></i>
        </span>
    </div>
    

    JavaScript

    var options = {
        format: 'mm/dd/yyyy hh:ii',
        autoclose: true
    };
    
    $('.date-time-picker').datetimepicker(options).on("changeDate", function (e) {
        var TimeZoned = new Date(e.date.setTime(e.date.getTime() + 
                                (e.date.getTimezoneOffset() * 60000)));
        $(this).datetimepicker('setDate', TimeZoned);
    });
    

    【讨论】:

    • 他妈不知道是什么意思:时间格式的“ii”——还有,为什么你要乘以 60k?
    • @Lightning3 插件使用的格式是:malot.fr/bootstrap-datetimepickergetTimezoneOffset() 以分钟为单位返回偏移量,getTime() 以毫秒为单位返回当前时间。所以这只是从分钟到毫秒的转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多