我有一个输出数据数组的 PHP 脚本。然后使用
JSON
函数将其转换为 json_encode()
。
我的问题是我的数组中有一个日期,但它的 JavaScript 格式不正确。我如何在 PHP 中将其转换为这样?
$newticket['ThreadID'] = $addticket;
$newticket['Subject'] = $subject;
//$newticket['DateCreated'] = date('d-m-Y G:H');
我需要相当于 JavaScript 函数的函数,而不是上面的日期函数
新日期()
当我输出上述内容时,我得到以下“Fri Jun 01 2012 11:08:48 GMT+0100 (GMT Daylight Time)”但是,如果我将 PHP 日期格式设置为相同,则 JavaScript 会拒绝它。困惑...
有人可以帮忙吗?
您可能应该只使用时间戳
$newticket['DateCreated'] = strtotime('now');
然后将其转换为 Javascript 日期
// make sure to convert from unix timestamp
var now = new Date(dateFromPHP * 1000);
Javascript Date 类支持 ISO 8601 日期格式,所以我推荐:
<?php
date('c', $yourDateTime);
// or for objects
$dateTimeObject->format('c');
?>
文档说:
格式字符“c”是 ISO 8601 日期(在 PHP 5 中添加)
示例:2004-02-12T15:19:21+00:00
非常简单。
PHP代码:
$formatted_date = $newticket['DateCreated'] = date('Y/m/d H:i:s');
Javascript代码:
var javascript_date = new Date("<?php echo $formatted_date; ?>");
如果你想要更精确的时间戳,你应该使用 microtime() 而不是 now()。
这给你:
echo round(microtime(TRUE)*1000);
对于 php 中的毫秒、类似 javascript 的时间戳。
很简单,我用的是这个:
new Date("<?= date('Y/m/d H:i:s'); ?>");
@jeremyharris 答案的改进或简化如下:
PHP 中的 DateTime 对象具有getTimestamp()
格式,使用它并将值乘以 1000:
<?php
$phpDateTimeStamp = new Date('Y/m/d H:i:s')->getTimestamp() * 1000;
?>
// JavaScript
let phpDateTimeStamp = 'YOUR_PHP_VARIABLE';
let startTime = new Date(parseInt(phpDateTimeStamp));
$newticket['DateCreated'] = date('d-m-Y G:H', strtotime($phpDateVariable));
DateFromString(str){
let months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let date = str.split(" ")[0];
let time = str.split(" ")[1];
let [Y, M, d] = [date.split("-")[0], date.split("-")[1], date.split("-")[2]];
let [H, m, s] = [time.split(":")[0], time.split(":")[1], time.split(":")[2]];
return {
FullYear: Y,
Month: M - 1,
MonthString: months[M - 1],
Date: d,
Time: {Hour: H, Minute: m, Second: s},
};
}
如果您愿意,您可以包含第二个参数,该参数描述使用默认值传递的字符串类型,并进行字符串测试以确定它是 unix 时间戳、javascript 时间戳还是字符串,然后使用返回的值对象来解析您的日期和时间,这是一个更全面的解决方案,因为它将允许您构建一个动态处理多个日期说明符的接口。
var phpTimeStamp = '2022-03-20 12:20:20'; /* timestamp format*/
var jsDateObject = new Date(Date.parse( phpTimeStamp ));
现在您可以访问日期对象的所有属性,例如
jsDateObject.getHours(); // gives hour
还有其他功能。
const convertDate = (
time,
format = "h:i" // Y-m-d H:i:s
) => {
/**
* Asume the date is 2023-09-01 23:11:01
* F = September ; Month as text
* M = Sep ; Month with 3 chars
* m = 08 ; Month with 3 chars
* j = 1 : day without zero
* d = 01 : day with zero
* D = Fri : day with 3 chars
* l = Friday : day with text
* Y = 2023 : Year Full
* y = 23 : Year short
* H = 23 : time for 24 hours
* h = 11 : time for 12 hours
* i = 11 : minute
* s = 01 : Second
*
*/
if (!time) time = new Date();
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const dt = new Date(time);
const F = months[dt.getMonth()];
const M = months[dt.getMonth()].substr(-2);
const m = `0${dt.getMonth()}`.substr(-2);
const j = dt.getDay();
const d = `0${dt.getDay()}`.substr(-2);
const D = days[dt.getDay()].substr(-2);
const l = days[dt.getDay()];
const Y = dt.getFullYear();
const y = `${dt.getHours()}`.substr(-2);
const H = `0${dt.getHours()}`.substr(-2);
const h = `0${(dt.getHours() > 12) ? dt.getHours() - 12 : dt.getHours()}`.substr(-2);
const i = `0${dt.getMinutes()}`.substr(-2);
const s = `0${dt.getSeconds()}`.substr(-2);
const vars = ['F', 'M', 'j', 'd', 'D', 'l', 'Y', 'y', 'H', 'h', 'i', 's']
const formats = vars.forEach(e => {
format = format.replace(eval('/' + e + '/gi'), (x) => {
return (eval(x));
})
return format;
})
return format;
}