将 PHP 日期转换为 javascript 日期格式

问题描述 投票:0回答:10

我有一个输出数据数组的 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 会拒绝它。困惑...

有人可以帮忙吗?

javascript php json datetime date-conversion
10个回答
41
投票

您可能应该只使用时间戳

$newticket['DateCreated'] = strtotime('now');

然后将其转换为 Javascript 日期

// make sure to convert from unix timestamp
var now = new Date(dateFromPHP * 1000);

17
投票

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

了解更多信息: http://php.net/manual/en/function.date.php


8
投票

非常简单。

PHP代码:

$formatted_date = $newticket['DateCreated'] =  date('Y/m/d H:i:s');

Javascript代码:

var javascript_date = new Date("<?php echo $formatted_date; ?>");

1
投票

如果你想要更精确的时间戳,你应该使用 microtime() 而不是 now()。

这给你:

echo round(microtime(TRUE)*1000);

对于 php 中的毫秒、类似 javascript 的时间戳。


1
投票

很简单,我用的是这个:

new Date("<?= date('Y/m/d H:i:s'); ?>");

1
投票

@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));
    

0
投票
$newticket['DateCreated'] = date('d-m-Y G:H', strtotime($phpDateVariable));
    

0
投票
最可靠的方法是扩展日期对象以将字符串解析为应用程序可以使用的对象。解析 mysql 日期时间字符串的快速示例

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 时间戳还是字符串,然后使用返回的值对象来解析您的日期和时间,这是一个更全面的解决方案,因为它将允许您构建一个动态处理多个日期说明符的接口。


0
投票
var phpTimeStamp = '2022-03-20 12:20:20'; /* timestamp format*/ var jsDateObject = new Date(Date.parse( phpTimeStamp ));
现在您可以访问日期对象的所有属性,例如

jsDateObject.getHours(); // gives hour
还有其他功能。


0
投票
也许这段代码对您有所启发,我刚刚创建了我需要的代码。

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; }
    
© www.soinside.com 2019 - 2024. All rights reserved.