繁体   English   中英

使用 PHP 或 JS 将存储的服务器时间转换为本地时间

[英]Convert Stored Sever Time into LOCAL time using PHP or JS

我有 wordpress 网站,我正在创建有时间的事件。 我可以在我的 php function 文件中使用以下内容访问它。

$start_date = DateTime::createFromFormat( AGENDA_SESSION_DATE_RETURN_FORMAT, $session['start_date'] );
$start_date = strtoupper( $start_date->format( 'g:i a' ) );

$end_date = DateTime::createFromFormat( AGENDA_SESSION_DATE_RETURN_FORMAT, $session['end_date'] );
$end_date = strtoupper( $end_date->format( 'g:i a' ) ); 

它使用服务器时间,我想将其转换为访客本地时间 + PST 时间。

我将以下服务器时间存储到数据库中。 在此处输入图像描述

我想将其转换为以下内容。 在此处输入图像描述

我不想使用访客的 IP 地址。

相反,我想使用访问者的操作系统时间,可以使用 JavaScript 访问。

我可以将PHP 日期传递给 JavaScript 有没有办法做到这一点

要求:显示用户时区而不是服务器时区的时间。 任何人都可以帮我解决这个问题?? 谢谢

尝试以下步骤

步骤 1:将 PHP 服务器日期时间戳添加到模板的 html 数据字段。

<span class="soap_time_custom" 
data-starttime="<?php echo strtotime(get_field( 'start_date_time', $post_id )); ?>" 
data-endtime="<?php echo strtotime(get_field( 'end_date_time', $post_id )); ?>" ></span>

在此处输入图像描述

第 2 步:计算您的服务器时间与访问者本地时间的差异。 下面的代码示例。

第 3 步:对于时区,请从此处使用 moment.js。

$(document).ready(function() {
    var timedelay = setTimeout(function(){ 

        if($(".soap_time_custom").length>0)
        {
            $(".soap_time_custom").each(function(index, element) {
                
                var starttime = $(this).data("starttime"); // 2020-10-18 18:00:00   /  1603044000
                var endtime   = $(this).data("endtime");   // 2020-10-18 18:10:00   
    
                if(starttime !== "" && endtime != ""){
                    
                    var d = new Date();
                    var n = d.getTimezoneOffset();
                    var ClientSide_starttime    = new Date((parseFloat(starttime)+n+350)*1000); 
                    var ClientSide_endtime      = new Date((parseFloat(endtime)+n+350)*1000);           
                    
                    //var local_time_zone       = (new Date()).toTimeString().match(new RegExp("[A-Z](?!.*[\(])","g")).join('');
                    var local_time_zone         = moment.tz(Intl.DateTimeFormat().resolvedOptions().timeZone).zoneAbbr();                   
                    var new_local_time          = formatAMPM(ClientSide_starttime)+" / "+formatAMPM(ClientSide_endtime)+" "+local_time_zone.toUpperCase();
                    $(this).html(new_local_time+" &nbsp; &#8212 &nbsp; ");
                }
                
            }); 
        }
    
    }, 2500,'');

    function formatAMPM(date) {
          var hours = date.getHours();
          var minutes = date.getMinutes();
          var ampm = hours >= 12 ? 'pm' : 'am';
          hours = hours % 12;
          hours = hours ? hours : 12; // the hour '0' should be '12'
          minutes = minutes < 10 ? '0'+minutes : minutes;
          var strTime = hours + ':' + minutes + ' ' + ampm;
          return strTime;
    }
    
});

在此处输入图像描述

注意:对于时区,您必须使用 2 个文件momentjs 和时区扩展名,如上面的屏幕截图所示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM