是否可以让JavaScript计算从PHP time()
函数返回的时间戳,并以可读格式呈现,例如“Sun,2010年4月18日下午4:00”?
答案 0 :(得分:27)
使用Date object执行此操作:
new Date(<?php echo time(); ?>*1000)
你需要将Unix时间戳乘以1000,因为Date
期望时间戳以毫秒为单位。
要格式化日期,您可以使用此Date.format
method(日期没有内置)。
答案 1 :(得分:2)
你会非常小心这样做。当您采用传统的“自Epoch边界以来的秒数(或毫秒)”值的服务器端时间值,然后将其转换为某种“Date”对象时,转换发生在适合于上下文的语言环境。
当你在芝加哥有一台服务器,而在夏威夷的某个人使用你的网站时,就会出现这个问题,比如参加一个聚会后 - 其中一个“luau”事件,毫无疑问,还有烤猪和草裙舞女孩们,在温暖的热带天空下度过的一个难得的夜晚,充满异国情调的鲜花嗅到海风 - 现在已经很晚了。我的天啊,快到午夜了!当我写下她关于聚会的时候母亲会怎么想?
我们的派对者在晚上11:30坐下来使用您的网站。现在,当然,在夏威夷东边,你的服务器认为是早上5:30,而且日期比我们的派对者在快速记录给妈妈记下的日期晚了一天。因此,您的服务器将其时间值写入网页,如此处的答案所述,并且 - 正确地 - 当地的夏威夷时间显示在我们的派对参与者酒店房间的页面上。
问题是:如果本地时间从某个表单字段返回到您的应用程序,并且您的应用程序将其视为芝加哥的本地时间 ,那么您的网站将在昨天的日期。取决于您的应用程序是好还是不行 - 重点是,您必须跟踪 日期(以普通日历表示法表示)来自相对于日期所在的位置使用
你当然可以遇到相反的问题。也就是说,如果您的服务器始终在其本地时区中呈现日期,那么世界其他地方的用户将看到令人困惑(显然是错误的)日期和时间值,因此界面必须清楚这些值的含义。当您的站点提供涉及计划的服务时,问题变得很重要。如果可以安排操作,那么界面将事物保持在水平上是很重要的,这样“4月30日晚上10点”表示服务器上的日期和时间 或者日期和时间安排时间表的区域设置。无论是哪种,你都必须小心保持一致。
答案 2 :(得分:2)
您还可以发送Date.parse()理解的日期的文本表示,而不是数字unix时间戳。 也许这只是我对全球变暖的贡献,但我认为使用一种更具人类可读性且包含时区信息的格式会有好处。
e.g。
<?php
// I have "decided" America/Los_Angeles fits most of my audience
date_default_timezone_set('America/Los_Angeles');
$now = time();
$yesterday = strtotime('yesterday', $now);
// March 27, 1976 08:00:00 tz:America/Los_Angeles
$someotherdate = mktime(8, 0, 0, 3, 27, 1976)
?><html>
<head><title>...</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function foo() {
$('.datetime').each( function() {
var t = $(this).text();
t = new Date(Date.parse(t)).toLocaleString();
$(this).text(t);
});
}
</script>
</head>
<body>
<div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div>
<button onclick="foo()">to local time</button>
</body>
</html>
打印
Sat, 17 Apr 2010 04:40:15 -0700
Fri, 16 Apr 2010 00:00:00 -0700
Sat, 27 Mar 1976 08:00:00 -0800
在我的浏览器中(因为我的当地时区是欧洲/柏林,CET,UTC + 1/2)点击to local time
按钮后
Samstag, 17. April 2010 13:40:15
Freitag, 16. April 2010 09:00:00
Samstag, 27. März 1976 17:00:00
答案 3 :(得分:0)
现在是2013年,随着越来越多的人从处理PHP端的SQL结果切换到在客户端传递JSON和处理结果,我认为moment.js值得自己注意,可以轻松替换PHP的strtotime Javascript中的()和date()函数,以及更多。
只需加入:
<script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script>
然后它就像:
一样简单// Simulates ajax response
var data = { someDate: "2023-08-23 11:52:39" }
// .unix() converts to Unix timestamp: 1692816759
moment(data.someDate).unix();
// Displaying it in a readable format
// Aug 23, 11:52 AM
moment("2023-08-23 11:52:39").format('MMM D, hh:mm A');
// Now
moment();
// Support for manipulation and chaining
moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0);
您可以在此处获取5.5kb js文件:
此处有更多文档: