引言
为了演示上一篇我们所说的PHP中反射的应用,本篇接着讲反射的应用。因为其特性,是操作函数和方法的,是函数的操作者,类的操作者,所以显得格外重要。
我们从一个小需求出发,假如有一段这样的代码:
function blah($a, $b) { return $a*$b; } echo getFunctionCode("blah");
当然 getFunctionCode函数本身在PHP中是不存在的,这里是伪代码。有没有可能,根据函数名,获取函数的内部代码呢?
学习时间
这个您真得拿好小本本记好了,非常地重要。这个功能如果是做全局的文档,可能非常实用。生成的文档,自动把函数的内部方法写出来,作为代码示例,实时修改,实时生效。
我们需要借助 ReflectionFunction 用于获取函数的基本信息,比如文件名,开始和结束的行数等等,直接上代码:
$func = new ReflectionFunction('myfunction'); $filename = $func->getFileName(); $start_line = $func->getStartLine() - 1; $end_line = $func->getEndLine(); $length = $end_line - $start_line;
上述代码假设有一个函数 myfunction,我们获取了 myfunction 所在的文件目录,并且得到了函数开始和结束的行数。
然后可以使用文件操作,将该段代码文本提取出来:
$source = file($filename); $body = implode("", array_slice($source, $start_line, $length)); print_r($body);
file 函数把整个文件读入到一个数组内,使用 array_slice 切分出 myfunction 所在的行,就是了!
实测
我们使用 Laravel 7 框架内,添加一个助手函数如下:
也就是格式化日期字符串。此函数在 composer 引导加载的时候,会全局有效。
为了测试,在 Commands 内添加临时指令,为了方便调试,使用 $this->info 输出信息:
命令行执行后输出内容如下:
与预想的结果一致。
写在最后
本文通过PHP提供的ReflectionFunction,将全局定义的函数,可以通过获取其绝对路径名,起始和结束行数,将函数的代码段打印出来。可以说是非常高阶而实用了。
Happy coding :-)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
WordPress的XML-RPC是为了规范不同系统之间的通信的一种代码,这意味着WordPress之外的应用程序(比如其他博客平台和桌面客户端)也是可以与WordPress进行相互之间的通信。
自从WordPress诞生以来,这个通信规范一直都是WordPress的一部分,非常有用。没有它,WordPress将与互联网的其他部分隔离开来。
然而,xmlrpc.php有它的缺点。它可以给你的WordPress网站注入漏洞,这个网站已经被WordPress REST API所取代。最好通过应用编程接口向其他应用程序打开WordPress。
此外还可以通过xmlrpc.php对自己的网站进行DDos
xmlrpc.php启用的功能之一是平回和引用通告。当另一个博客或网站链接到您的博客文章时,这些通知将显示在您网站的评论中。
XML-RPC规范使得这种通信成为可能,但是它已经被REST API所取代(正如我们已经看到的)。
如果您的站点启用了XML-RPC,黑客可能会利用xmlrpc.php在短时间内向您的站点发送大量的ping命令,从而在您的站点上发起DDoS攻击。这可能会使服务器过载,并阻止站点正常运行。
同时也可以通过XML-RPC,黑客可能会利用xmlrpc.php在对长时间对你的网站进行无限制的密码爆破,从而进入到你的后台,让你的网站时时刻刻都有一种被人入侵,一旦被同行利用,直接入侵你的网站,对你的网站进行删库,从而达到他的目的。
xmlrpc.php是否在您的WordPress网站上运行?
其实很简单:直接在WordPress XML-RPC验证服务 网站上输入的你网站
会显示你的网站是否禁用xmlrpc.php,如果看不懂英文,建议使用Google浏览器,一键翻译。
最后
安装插件以禁用xmlrpc.php是最简单的方法。你可以通过安装Disable XML-RPC插件来实现。
最近,网络上有很多网民就选择哪种编程语言进行学习而纠结。例如,关于Java和php的优势和不足,今天为大家分析一下Java语言和PHP语言的区别。
一、Java语言的优势和不足
Java是非常热门的编程语言,与其他高级语言相比,则是非常基础的语言。并且Java是跨平台的,具有Android,Swing,J2EE和J2ME等多种应用程序。就业方面比较广泛,市场利用者的需求也很大。由于Java经常开发大型系统,因此大型企业往往需要大量的Java资源。
Java学习门槛高于php,需要学习更多的内容,掌握Java技术,确实可能需要4个月以上,待遇相对高于php,据统计,一线城市Java程序员平均工资7000左右,有1年的工作经验,月薪8500-1万左右。
二、PHP语言的优势和不足
PHP主要用于开发网站,许多较小的网站都是使用PHP开发的。因为PHP是开源的,所以PHP长期使用的原因就在于此。在电子商务、社区和其他领域,PHP的应用非常广泛,因此PHP具有非常成熟的开放源代码和模板。
缺点是受众小,可替代性强。PHP是脚本语言,所以PHP学习比较简单,经过3-4个月的时间就能上手,并且找工作起薪比例比Java较低,平均工资比Java低,但是经验丰富的php程序员工资会要高一些。
引言
在实际业务逻辑中,对时间戳,日期对象,日期字符串的处理,我们经常需要用到时间比较,还需要用到求日期差。比如对一场活动的倒计时,优惠券的过期时间等等。
今天我们介绍一下如何计算两个日期之间的差值?
因为日期可以是字符串,对象,数值,格式各不相同,有的精确到日,有的精确到小时,有的精确到毫秒。如何在处理中做到容错率要高呢。
学习时间
先说最笨的办法。不借助任何对象,我们仅使用内置的函数加减乘除和格式转换。像下面这样写。(这个方法对于实施了夏令时的地区,会出现错误。)
$now = time(); $your_date = strtotime("2020-01-31"); $datediff = $now - $your_date; echo round($datediff / (60 * 60 * 24));
上面的方法是使用时间戳,把整数值做减法,最后除以一天的秒数,四舍五入取整,就是相差的天数。
这样写当然是没有问题的。但是,如果在框架内使用,我们更提倡使用对象的操作方式对时间进行运算。
下面是 PHP 提供的内置的 DateTime 对象用于操作。
$earlier = new DateTime("2019-07-06"); $later = new DateTime("2020-07-01"); $diff = $later->diff($earlier)->format("%a");
DateTime 日期时间对象是 PHP 5.3 以上才提供的。上述代码在求差值运算上,调用了 DateTime 的 diff 方法,并链式调用 format 格式化输出。
更简单友好:Carbon
如果你觉得使用 DataTime 对象实在是不好用,有没有更友好的,更简单,调用更简单的类呢?有的,它就是Carbon库。该库封装了非常多非常多日期时间操作解析的方法,足以应对各种各样变态的需求。
计算日期天数差,简直是小菜一碟,
$dt = Carbon::parse('2020-01-01'); echo $dt->diffInDays(Carbon::now());
第一行,把日期字符串解析成 Carbon 对象。然后对其进行求天数差的方法 diffInDays。结果就是天数。
那如果要求相差的小时数呢,diffInHours,diffInSeconds,是不是简单好记?猜都能猜的到用途。
写在最后
我们强烈建议,使用 DateTime 或者 Carbon 库执行日期时间的操作,效率很高,操作方便,而且容错率很高。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
基本设定:
他们有两种设置法:
方法1:php.ini中:影响全局
方法2:直接带代码中:只影响当前网页
演示代码:
session-expire-1.php中:
session-expire-2.php中:
先浏览session-expire-1.php,则在一分钟之内浏览session-expire-2.php,可以看到“有session”
但如果在一分钟之后浏览session-expire-2.php,可以看到“没有session”。
原因就是:1分钟之后,该session数据对应的PHPSESSID的cookie数据已经超时,无法传回到服务器端。
以上几项的设置,可以使用一个函数一次性搞定:
之前粗糙的介绍了ajax的使用,验证用户名是否填写正确,邮箱是否重复,不用刷新页面获取数据,今天详细介绍一下ajax的原生代码。
小编先介绍一下ajax概念:
AJAX:异步的JavaScript和XML,AJAX的核心是XMLHttpRequest对象,怎么创建XMLHttpRequest对象呢?
创建XHR对象(需要考虑不同的浏览器兼容问题)
Firefox、Opera等浏览器
var 对象名称 = new XMLHttpRequest()
IE浏览器
var 对象名称 = new ActiveXObject("Microsoft.XMLHTTP")
demo1:获取服务器的日期和时间
获取服务器的日期和时间我们看看代码执行效果
运行代码demo2 ajax在表单里面的运用
ajax在表单里面的运用附上php代码
php代码代码思路解答:在填写用户注册名称时候验证用户名是否存在,通过url传递用户名信息,php那边通过get接收数据然后执行数据库搜索这一过程。本来是一个执行数据库操作,这里简化为admin是存在数据库的不能重复注册,其他就可以注册,我们看看代码运行效果。后面放一个空的span标签用来提示注册结果。
ajax验证用户是否重复注册demo3 通过ajax获取xml数据
通过ajax获取xml数据1-3.php代码如下,定义一个xml文件
定义xml文件我们看看代码运行效果
ajax获取 xml数据今天介绍了ajax的常见三种运用,获取服务器数据,验证用户名是否符合要求,获取xml数据。有兴趣的朋友快去试试吧。
由于php 32位使用 int 类型保存时间戳,也就是从1970 00:00:00 到当前时间的秒数。
而32位int 数字的取值范围是 -2147483648 到 2147483647。
所以当 时间戳为最大值 2147483647 时,表示的时间是 2038-01-19 03:14:07 或北京时间 2038-01-19 11:14:07 (为了表述方便,下文中,将这个临界点时间称之为 T0)。
而当时间大于这个时间时,php很多内置函数都会出错。
比如
当日期和时间大于 北京时间 2038-01-19 11:14:07 时
time()函数,原本应该返回时间戳,现在会始终返回-1。
date("Y-m-d H:i:s")函数,会返回 1970-01-01 07:59:59(北京时间),其实也是因为 time()=-1导致的,date默认的第二个参数就是time()。
同样,mktime() 等函数也会异常。
上网查了解决办法,
1、换用64位系统。这里说的64位系统,需要操作系统、web服务系统,以及PHP都要64位的。
2、使用php5.2之后推出的 DateTime 类。
首先说第一种方法,因为我的服务器建设在Windows系统上,然后又有几个自制插件,这些插件在php 64位下面可能不能使用,因此这个方法不能用。
再说DateTime类,网上几乎几十篇文章都说使用DateTime类就能解决2038年问题。
我在自己的服务器上测试了一下,使用DateTime类似乎确实可以让日期超过2038上限,各种转换,都没问题,这里我不具体说明,大家网上搜"php datetime",都有说明。
但是,我在把服务器的时间设置为2040年4月18日的时候,发现,datetime 类依然无法获取当前时间。代码如下:
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');
输出的还是 1970-01-01 07:59:59
但是,如果使用 $date->setDate(2040,4,18) 之后,再显示,再输出时间戳等,都是正常的代码如下:
$date = new DateTime();
$date->setDate(2040,4,18);
$date->setTime(10,24,11);
echo $date->format('Y-m-d H:i:s')."\r\n";
echo $date->format('U')."\r\n";
这时 输出时间 2040-04-18 10:24:11 ,以及时间戳 2218328651 都是正常的。
问题在于,datetime 类可以解决 2038年之后的时间的各种运算和转换,但是当系统日期在2038年那个T0时间之后,php系统根本无法获取当前时间。
我还试了 new DateTime("today");new DateTime('+2 days');new DateTime('tomorrow'); 等等,都无法获取今天,明天,后天等日期。
这时,整个php 系统无法获取当前的年月日和时间。
然后我开始在php的系统数组 $_SERVER 中寻找,看看哪里能找到和时间相关的内容,终于被我找到一个 $_SERVER["REQUEST_TIME"],这个实际上是一个记录用户刷新页面时php相应时刻的时间。它的值,在T0之前,和time()是一致的,但是,当T0之后,它就变成负数了。那么,怎么通过 $_SERVER["REQUEST_TIME"] 来获取真实的 时间戳呢?
很简单,32位int 数字的取值范围是 -2147483648 到 2147483647,转成2进制就会发现,其实是最高位用作符号位,最高位0表示正数,最高位1表示负数,当数字达到 2147483647后,二进制 就是 01111111 11111111 11111111 11111111(31个1),这时就是T0时刻的时间戳,继续+1 以后,变成了 10000000000000000000000000000000 (31个0),如果是无符号32位整数,就是 2147483648(正数) 但是在有符号的整数里,最高位1表示负数,就是 -2147483648(负数),而 $_SERVER["REQUEST_TIME"] 的特性是根据时间的推移进行累加。所以,它的时间线如下:
T0 之前:它等于 1970 00:00:00 到当前时间的秒数,和time()相同
T0 时: 它等于 2147483647
T0 后1秒: 它等于 2147483647+1=2147483648 被表示为 -2147483648 我们把 -2147483648 记作 T1,T1=T0+1秒的时刻
T0 后N秒:-2147483648-1+N
所以,当 $_SERVER["REQUEST_TIME"]<0 时,真正的时间戳为 $_SERVER["REQUEST_TIME"]-(-2147483648)+ 2147483647。
其中 $_SERVER["REQUEST_TIME"]-(-2147483648)表示 T1(变成负数,即T0+1秒) 时刻到当前时间 过了多少秒。
据此,写出一个新的取代time()的函数,该函数在系统时间超过T0 时,也能返回正确的时间戳,但是它的范围是无符号32位上限 4294967295,北京时间 2106-02-07 06:28:15。在这个时间之前,应该都可以正常使用。
function sunTime(){
if($_SERVER["REQUEST_TIME"]>0){
$t=$_SERVER["REQUEST_TIME"];
}else{
$t0=PHP_INT_MAX; // 第 2147483647 秒 再过一秒为 2147483648秒,但最高位变成1,系统中为 -2147483648
$t1=0-$t0-1; // t0后面1秒,瞬间变成负数,值为 -2147483648
$t2=($_SERVER["REQUEST_TIME"]);//虽然$_SERVER["REQUEST_TIME"]变成了负数,但是 系统依然通过 +1秒 来计时
$t=$t2-$t1+$t0.""; //t2-t1 就是变成负数后过了多少秒,t0就是变成负数前的秒数。
}
$date=new datetime("@".$t);
$timemark=$date->format("U");
return $timemark;
}
所以,目前网上很多人都以为使用 DateTime类可以解决问题,殊不知等时间真正到了2038那个时间之后,php系统获得当前时间都会出错。而我这方法也是目前网上唯一存在的方法。
阳光浪子
2018-04-18
在使用ThinkPHP模型的时候,我们可以自动使用时间戳功能,而不需要像PHP原生一样把时间戳通过PHP函数进行转化为常见的日期格式,TP里的时间戳字段是可以支持自动格式化输出。系统支持自动写入数据库中创建和更新时间戳字段两种,在使用这两种时间戳前需要一定的配置支持,下面小菌为大家介绍一下具体的用法。
首先需要配置支持有两种方式,第一种方式,是在数据库配置文件中添加全局设置,它的路径是\TP根目录\application\database.php,需要把里面的配置'auto_timestamp' => true;。第二种方式,是直接在单独的模型类里面设置,它的路径就是你的模型类的文件例如\TP根目录\application\index\model\XXX.php,这里需要在创建的类里面加入protected $autoWriteTimestamp = true;,如果这两个地方设置是true,默认的数据库中时间戳类型识别为整型int类型,如果你的时间戳字段不是int类型的话,例如使用datetime类型的话,那么应该这样设置: 'auto_timestamp' => 'datetime', 或者 protected $autoWriteTimestamp = 'datetime';,数据库中的时间戳字段名,创建时间字段名为create_time,更新时间字段名为update_time,支持的字段类型包括timestamp/datetime/int这三种。写入数据的时候,系统会自动写入create_time和update_time字段,而不需要定义修改器,在模板显示的时候直接使用{$data.create_time}即可,而原生的显示时间的写法假如是这样{$data.create_time|date='Y-m-d H:i:s',### },它的输出类似 2016-10-12 14:20:10,是不是简化很多代码了呢,小伙伴们?
如果你只需要使用create_time字段而不需要自动写入update_time,则可以单独设置关闭某个字段;如果不需要任何自动写入的时间戳字段的话,可以关闭时间戳自动写入功能;如果是关闭全局的自动时间写入,则如下图所示:
ThinkPHP模型中自带的时间戳功能创建和更新的用法
https://www.qwzyj.com/thread-169-1-1.html
(出处: 全网资源菌)
第一节 时间戳(timestamp)
在著名的unix系统中,使用了一种简洁高效的时间表示方法,即: 将1970年1月1日0时0分0秒作为“unix纪元”的原点,从1970年1月1日开始经过的秒数存储为一个32位整数,这个整数随着时间的变化不断增加,又被称为时间戳(timestamp)。
第二节 常用函数
PHP第三节 date()主要参数
年
月
日
星期
时间
完整的日期时间
PHP-正则表达式「程序员培养之路第三十四天」
PHP-函数「程序员培养之路第三十三天」
PHP-流程控制「程序员培养之路第三十二天」
科普一下什么是时区
众所周知,地球绕着太阳转的同时也会自转,因此同一时刻不同地区所接收到太阳照射的情况不同,所以有的地区是日出,有的地区是日落,还有的地区可能是黑夜.
既然地球上的不同地区时间不同,那总要有统一的时间刻度才能方便文化科技交流吧,不然大家说的都是当地时间,这样岂不是乱套了?
有问题就要解决问题,不同地区时间不同就要统一时间标准,而统一时间标准的前提就是要弄清楚全球的时间差异到底在哪以及各地的当地时间如何互相转换.
原来的时间标准是格林尼治标准时间,随着精确计时的发展需要,已被新的时间标准所取代,目前的时间标准是世界协调时.
现在有了统一的时间标准,不同地区的时间就可以统一换算成世界协调时再转换成当地时间了,再也不会出现同一时刻不同时间了!
示例:
北京时间(UTC+8) : 2019-05-30 13:30:00世界时间(UTC) : 2019-05-30 05:30:00东部时间(UTC-5) : 2019-05-30 00:30:00格林尼治标准时间
格林尼治标准时间(又称格林威治平均时间或格林威治标准时间,英文是GreenwichMeanTime,简称GMT),格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治时)的时间.
格林尼治是英国伦敦的一个小镇,是地理经度的起点,本初子午线所在的经度是零度经度,所在的时区是零时区.
我们知道一天共有 24 小时,对应着全球 24 个时区,而地球自西向东自转,零时区后依次是东一区到东十一区,然后是东十二区.紧接着是西十二区,西十一区到西一区,最后又回到零时区.
其中东十二区和西十二区是同一个时区,又被称为东西十二区.
总的来说,时区分为东十二区和西十二区以及零时区,其中东西十二区是同一个时区,因此共有 24 个时区.
示例:
由于北京位于东八区,比零时区多个 8 个时区,意味着北京时间比格林标准时间快8 个小时.
所以,北京时间中午 12 点整的时候,格林尼治才清早 4 点钟,估计还在睡觉呢! ( GMT+8 就是北京时间)
格林尼治标准时间与地球自转有关,不能满足精确计时的需求,因此不再作为标准时间,取而代之的是协调世界时.
协调世界时
协调世界时(又称世界统一时间或世界标准时间或国际协调时间,英文是Coordinated Universal Time,简称UTC),协调世界时是以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间的一种时间计量系统.
在不需要精确到秒的情况下, GMT 和 UTC 基本一致,但 UTC 是以更加精确的原子时为基础,因此常用于科学计算领域,也是目前时间计量的统一标准.
示例:
北京时间 12:00 ,换算成 GMT 或 UTC 时间都是 04:00 ( UTC+8 也是北京时间)
北京时间
北京时间(又称中国标准时间),是首都北京所在的时区作为中国的标准时间,比格林尼治标准时间快8小时.
我国幅员辽阔,从西到东横跨东五,东六,东七,东八和东九等五个时区.所以全国统一采用首都北京所在的东八时区的区时作为标准时间,也就是北京时间.
时区信息数据库
时区信息数据库,又称 Olson数据库,是一个主要应用于电脑程序以及操作系统的可协作编辑世界时区信息的数据库.
时区信息数据库采用按“区域/位置”命名规范,方便应用于计算机世界,其中英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名本身包含时使用.
示例:
Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐上述时区主要是 php 中所支持的中国时区,参考 亚洲所支持的时区列表
关于时区的编程实现
时区不仅仅是现实生活的问题,计算机编程世界也有时间,自然也离不开时区的概念.
在计算机世界中,一切都是数据,最好时区的概念也能体现在相关数据库中,幸运的是已经有前辈为我们提供了时区信息数据库,而各类语言基本都会提供时区的工具类.
php 中的日期时间函数库是 php内置函数库,我们可以方便地操作时间,设置时区等.
正常情况下, date 扩展默认是启用的,我们可以输入 phpinfo 打印出 php 的基本信息,然后搜索关键字 date 就可以找到关于 date 扩展的相关信息.
示例
结果默认时区:当前时区: UTC当前时间: 2019-05-30 05:30:00
由此可见,假设不设置时区的话,默认时区是协调世界时,该时区和北京时间相比慢 8 个小时!
设置时区的三种姿势
翻阅 php 开发文档中可以找到目前所有支持时区列表,下面整理出关于中国的主要时区.
Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐常用时区是上海,并没有北京,当然也可以设置成 PRC (中华人民共和国)!
如果没有设置时区的话,默认时区应该是协调世界时(UTC),虽说是通用的时间标准,但转换成当地时间还是需要一定换算的,而且看起来也不太舒服.
所以最好还是修改一下时区的设置项,如果业务不考虑国际化需求,那么永久性把时区固定就可以了,如果有国际化的业务场景,那么最好能够动态设置时区,这样就能清楚知道当地时间了.
因此,下面主要提供两种方式来设置时区,分别是静态设置和动态设置,其中动态设置又提供了两种方法.
静态修改 php 配置
php 的配置文件默认位于 : /private/etc/php.ini ,打开文件后修改 date.timezone 选项.
由于这种方法是直接修改配置文件,因此时区设置后适用于所有脚本,只不过需要重启服务器方可生效.
示例
结果# 去掉;并设置时区,取值可以是PRC,也可以是Asia/Shanghai等时区date.timezone = PRC详情请参考: http://php.net/date.timezone
动态设置 php 配置
ini_set 支持设置当前脚本的默认时区选项.
静态设置时区仅仅适合时区固定的情况,如果需要动态切换时区,修改配置文件就不能满足这种情况了.
因此,php 中还提供了动态修改 php.ini 配置文件的方法,ini_set() 方法刚好支持动态设置时区.
不用重启服务器,但仅仅针对当前脚本生效,其中 ini_set 方法支持的 php.ini 配置选项列表
示例
结果当前时区: Asia/Tokyo当前时间: 2019-05-30 14:30:00
动态设置 php 时区
date_default_timezone_set 方法用于设置当前脚本的默认时区.
ini_set 虽然支持设置时区选项,但毕竟不是专业设置时区的方法,date_default_timezone_set 才是专门设置时区的方法.
这两个方法都属于动态设置时区,也都是针对当前脚本生效,也都不用重启服务器就能立马生效.
示例
结果当前时区: Asia/Tokyo当前时区: UTC当前时间: 2019-05-30 05:30:00
关于时区的一些总结
时区和时间密切相关,统一时间说的其实是统一时间的标准,这样一个地区的当地时间就可以轻易转换成另一个地区的当地时间了.
目前世界上统一的时间标准是协调时间时(UTC),中国的时间标准是北京时间,北京时间比协调时间时快 8 个小时.
现实世界的时区也要反映到计算机世界,其中时区信息数据库就是用于表示现实世界的时区概念.
由此可见,时区是一个通用概念,不仅 php 有时区,java 和 js 等语言也有时区概念,可以说只要有时间的地方都离不开时区.关于时区的小技能,你 get 到了吗?
美剧<<闪电侠>>当地时间是星期二晚上八点开播,请问北京时间何时开播?英剧<<神探夏洛克>>北京时间凌晨四点半开播,请问当地时间是何时开播?泰剧<<新铁石心肠>>当地时间是晚上九点二十开播,请问北京时间是何时?参考资料
时区相关知识扫盲时区时差时间换算